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 te permite acceder a los métodos como atributos, proporcionando una forma limpia de obtener y establecer valores. Esto es útil para la encapsulación, ya que te permite agregar lógica de validación o valores calculados sin cambiar la interfaz pública de tu clase.

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

Ten en cuenta que usamos self._radius para almacenar el valor real. Si usáramos self.radius dentro del getter, volvería a llamar al método getter, lo que provocaría una recursión infinita.

Crea un círculo y accede a sus 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 propiedades: parecen atributos pero ejecutan código de método.

Añade un setter para permitir cambiar valores con validación:

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 radius como un atributo:

my_circle = Circle(5)
my_circle.radius = 10  # Uses the setter
print(my_circle.radius)  # Uses the 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, lo que habilita la validación de datos y la encapsulación.

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