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 ** 2Ten 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.53975Observa 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 getterSalida:
10Punto 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.
Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Object Oriented Programming
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 bancarias