@property se usa para encapsular atributos, añadir validaciones o lógica interna, pero sin cambiar la forma natural de acceder o modificar una variable.
El decorador @property convierte un método de una clase en un atributo “solo de lectura” (al menos inicialmente).
Sirve para controlar cómo se accede a un atributo, pero permitiendo que el código parezca estar accediendo directamente a una variable.
En otras palabras:
Permite usar métodos como si fueran atributos, sin cambiar la sintaxis de acceso.
class Persona:
def __init__(self, nombre):
self.__nombre = nombre # atributo privado
def get_nombre(self):
return self.__nombreUso:
p = Persona("Ana")
print(p.get_nombre()) # ✅ FuncionaPero se ve feo tener que escribir .get_nombre() cada vez.
Ahí entra @property.
class Persona:
def __init__(self, nombre):
self.__nombre = nombre
@property
def nombre(self):
return self.__nombreUso:
p = Persona("Luis")
print(p.nombre) # ✅ Sin paréntesis, parece un atributo-
Python llama automáticamente al método
nombre()cuando escribesp.nombre. -
Es solo de lectura por ahora (no se puede cambiar el valor directamente).
class Persona:
def __init__(self, nombre):
self.__nombre = nombre
@property
def nombre(self):
return self.__nombre
@nombre.setter
def nombre(self, nuevo_nombre):
if len(nuevo_nombre) > 0:
self.__nombre = nuevo_nombre
else:
print("❌ El nombre no puede estar vacío.")Uso:
p = Persona("Carlos")
print(p.nombre) # ✅ Getter
p.nombre = "Andrés" # ✅ Setter
print(p.nombre) # Andrés
p.nombre = "" # ❌ El nombre no puede estar vacío. @nombre.deleter
def nombre(self):
print("Eliminando el nombre...")
del self.__nombre| Decorador | Función | Qué hace |
|---|---|---|
@property |
Getter | Devuelve el valor (lectura) |
@atributo.setter |
Setter | Modifica el valor (escritura) |
@atributo.deleter |
Deleter | Elimina el atributo |
Autor: Fravelz