Python proporciona una forma más elegante y concisa de definir getters y setters utilizando la función property
.
Esta función permite definir una propiedad que se usa como un atributo, pero con la capacidad de controlar su acceso y modificación.
Las propiedades hacen que el acceso a los atributos parezca más natural, y su sintaxis es más limpia y fácil de entender.
Definición de propiedades
Se utiliza la palabra reservada property
para definir una propiedad. Se puede pasar opcionalmente un getter, un setter y un deleter a esta función.
class Persona:
def __init__(self, nombre, edad):
self._nombre = nombre
self._edad = edad
@property
def nombre(self):
return self._nombre
@nombre.setter
def nombre(self, nombre):
if isinstance(nombre, str):
self._nombre = nombre
else:
raise ValueError("El nombre debe ser una cadena de texto")
@property
def edad(self):
return self._edad
@edad.setter
def edad(self, edad):
if isinstance(edad, int) and edad > 0:
self._edad = edad
else:
raise ValueError("La edad debe ser un número entero positivo")
Uso de propiedades
Con las propiedades definidas, se pueden obtener y establecer valores utilizando la sintaxis de atributos, lo que hace el código más limpio y legible.
persona = Persona("Luis", 25)
print(persona.nombre) # Salida: Luis
persona.nombre = "Carlos"
print(persona.nombre) # Salida: Carlos
print(persona.edad) # Salida: 25
persona.edad = 30
print(persona.edad) # Salida: 30
Fijaos que no tengo que invocar a un método setter o getter. Simplemente obtengo el valor con .
, y lo escribo con =
, igual que si fuera un atributo.