
Python @property: de la encapsulación a los descriptores
Acceder a r.width y escribir r.width = 15 con la misma sintaxis que un atributo normal, mientras se ejecuta validación o cálculo por debajo: eso es lo que @property aporta. Y cuando esa lógica necesita compartirse entre varias clases, los descriptores entran en juego. @property: getters y setters sin fricción @property permite exponer un atributo calculado o validado con la misma sintaxis que un atributo simple. class Rectangle: def __init__(self, width: float, height: float): self._width = width self._height = height @property def width(self) -> float: return self._width @width.setter def width(self, value: float) -> None: if value <= 0: raise ValueError("El ancho debe ser positivo.") self._width = value @property def area(self) -> float: return self._width * self._height El beneficio concreto: la API pública no cambia. Añadir validación a un atributo existente no rompe ningún código llamador. @property sin setter crea un atributo de solo lectura. @nombre.deleter gestiona la eliminación con del. ...