¿Sobre qué mecanismo se construye @property?
Opciones
- Metaclasses, que reescriben la clase cuando se crea
- El protocolo descriptor, con
__get__y__set__(Opción correcta) - El fallback
__getattr__, que se llama para atributos que faltan - Closures, que mantienen vivas las variables del getter
Respuesta
El protocolo descriptor (__get__ / __set__)
Por qué
Un descriptor es un objeto que controla qué pasa cuando se lee o escribe un atributo, definiendo __get__, __set__ o __delete__.
property es un descriptor incorporado: leer obj.x llama a tu función getter.
El mismo mecanismo hace funcionar los métodos, los classmethods y las columnas de un ORM (como los campos de SQLAlchemy).
Recuerda
@property es un descriptor.