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 ** 2Crea 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.53975Observa 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 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.
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 ** 2Acceda a las propiedades sin paréntesis:
my_circle = Circle(5)
print(my_circle.radius) # 5
print(my_circle.area) # 78.53975Añ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 getterPrué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