Menu
CoddyTech

Decorador de propiedad

Parte de la sección Programación orientada a objetos del Journey de Python de Coddy. Lección 10 de 64.

El decorador @property te permite acceder a los métodos como si fueran atributos, lo que proporciona una forma clara de obtener y establecer valores. Esto es útil para la encapsulación, ya que te permite añadir lógica de validación o valores calculados sin cambiar la interfaz pública de tu clase.

Aquí tienes un ejemplo de una clase que usa @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 método 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 si fueran atributos normales:

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

Salida:

5
78.53975

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

Añade un método setter para permitir cambiar los 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 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, lo que permite 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 Programación orientada a objetos

Practica por tu cuenta: Compilador de Python online