Menu
Coddy logo textTech

Decorador property

Parte de la sección Object Oriented Programming del Journey de Python de Coddy — lección 10 de 64.

El decorador @property permite acceder a los métodos como atributos, proporcionando una forma limpia de obtener y establecer valores.

Aquí hay un ejemplo de una clase que utiliza @property:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @property
    def area(self):
        return 3.14159 * self._radius ** 2

Crea un círculo y accede a las propiedades:

my_circle = Circle(5)

Accede a las propiedades como atributos normales:

print(my_circle.radius)
print(my_circle.area)

Salida:

5
78.53975

Observa que no usas paréntesis () al acceder a las propiedades: parecen atributos, pero ejecutan código de método.

Agrega un setter para permitir cambiar los valores:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @radius.setter
    def radius(self, value):
        if value > 0:
            self._radius = value
        else:
            print("Radius must be positive!")

Ahora puedes establecer el radio como un atributo:

my_circle = Circle(5)
my_circle.radius = 10  # Usa el setter
print(my_circle.radius)  # Usa el getter

Salida:

10

Punto clave: @property hace que los métodos parezcan atributos, mientras que @property_name.setter te permite controlar cómo se asignan los valores.

Hoja de referencia

El decorador @property le permite acceder a los métodos como si fueran atributos, proporcionando una forma limpia de obtener y establecer valores.

Uso básico de propiedades:

class Circle:
    def __init__(self, radius):
        self._radius = radius
    
    @property
    def radius(self):
        return self._radius
    
    @property
    def area(self):
        return 3.14159 * self._radius ** 2

Acceda a las propiedades sin paréntesis:

my_circle = Circle(5)
print(my_circle.radius)  # 5
print(my_circle.area)    # 78.53975

Añada un setter para controlar la asignación de valores:

@radius.setter
def radius(self, value):
    if value > 0:
        self._radius = value
    else:
        print("Radius must be positive!")

Establezca valores como si fueran atributos:

my_circle.radius = 10  # Utiliza el setter
print(my_circle.radius)  # Utiliza el getter

Pruébalo tú mismo

Esta lección no incluye un desafío de código.

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 Object Oriented Programming