Menu
Coddy logo textTech

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._age

Usa la propiedad como un atributo normal:

person = Person("Alice", 30)
print(person.age)

Salida:

30

Observa 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 = value

Ahora 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 negativa

Salida:

31

Crea 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 = 15

Salida:

15

Punto 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.

challenge icon

Desafío

Intermedio

Completa 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°F

Prué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 antes
quiz iconPonte a prueba

Esta 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

Practica por tu cuenta: Compilador de Python online