Decoradores de propiedades
Parte de la sección Programación orientada a objetos del Journey de Python de Coddy. Lección 14 de 64.
Los decoradores de propiedades te permiten controlar cómo se accede a los atributos y cómo se modifican, manteniendo la sintaxis sencilla de los atributos.
Aquí tienes un ejemplo de una clase con un getter de propiedad:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._ageUsa la propiedad como un atributo normal:
person = Person("Alice", 30)
print(person.age)Salida:
30Observa que accedes a age sin paréntesis, aunque en realidad estás llamando a un método.
Añade un setter para validar los datos al establecer valores:
class Person:
def __init__(self, name, age):
self._name = name
self._age = age
@property
def age(self):
return self._age
@age.setter
def age(self, value):
if value < 0:
raise ValueError("Age cannot be negative")
self._age = valueAhora puedes establecer la edad con validación automática:
person = Person("Alice", 30)
person.age = 31 # Usa el setter con validación
print(person.age) # Usa el getter
# Esto lanzaría un error:
# person.age = -5 # ValueError: La edad no puede ser negativaSalida:
31Crea propiedades calculadas que calculen valores:
class Rectangle:
def __init__(self, width, height):
self.width = width
self.height = height
@property
def area(self):
return self.width * self.height
rect = Rectangle(5, 3)
print(rect.area) # Calcula 5 * 3 = 15Salida:
15Punto clave: los decoradores de propiedades hacen que los métodos parezcan atributos. Usa @property para los getters y @attribute_name.setter para los setters. Esto permite la validación de datos y los valores calculados, a la vez que mantiene una sintaxis sencilla de acceso a atributos.
Desafío
IntermedioCompleta la clase Temperature en temperature.py que convierte entre Celsius y Fahrenheit. Después usa esta clase en driver.py para probar las conversiones de temperatura. Sigue los comentarios TODO de ambos archivos para consultar las instrucciones paso a paso.
Imprime cada conversión como [celsius]°C is [fahrenheit]°F, con el valor Celsius exactamente como se proporcionó y el valor Fahrenheit tal como lo calcula Python. No redondees ni formatees los números. Las dos líneas que produce el controlador son:
25°C is 77.0°F
37.0°C is 98.6°FPruébalo tú mismo
# TODO: Importa la clase Temperature del módulo temperature
# Prueba la clase:
# TODO: Crea una instancia de Temperature a 25°C
temp = None # Reemplaza con una instancia real de Temperature
# TODO: Imprime ambos valores en Celsius y Fahrenheit
# TODO: Usa el formato: "25.0°C is 77.0°F"
# TODO: Establece la temperatura a 98.6°F
# TODO: Imprime ambos valores de nuevo para confirmar que la conversión funciona
# TODO: Usa el mismo formato que antesEsta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Programación orientada a objetos
1Fundamentos de la POO
Archivos externosIntroducción a la POOClases vs ObjetosEl parámetro selfMétodosAtributosMétodo constructor (__init__)Resumen - Calculadora simple4Herencia
Herencia básicaLa función super()Sobrescritura de métodosHerencia múltipleOrden de resolución de métodosResumen - Jerarquía de empleados7Métodos especiales
Introducción a los métodos mágicosSobrecarga de operadoresMétodos mágicos de contenedoresRepaso - Lista personalizada10Patrones de diseño Parte 1
Introducción a los patrones de diseñoPatrón SingletonPatrón FactoryPatrón ObserverPatrón Strategy2Decoradores
Introducción a los decoradoresDecorador propertyDecorador de métodos estáticosDecorador de métodos de clase5Polimorfismo
Sobreescritura de métodos revisitadaDuck TypingClases y métodos abstractosDiseño de interfacesResumen - Calculadora de figuras8Conceptos avanzados de POO
Composición vs. HerenciaMixinsMétodos estáticos y de claseDecoradores de claseGestores de contexto11Patrones de diseño, parte 2
Patrón CommandPatrón AdapterPatrón DecoratorPatrón Template MethodPatrón StatePatrón Composite3Propiedades de clase
Variables de instancia vs de claseDecoradores de propiedadesAtributos privadosResumen - Gestor de cuentas bancariasPractica por tu cuenta: Compilador de Python online