Quiero anular el __getattr__método en una clase para hacer algo elegante, pero no quiero romper el comportamiento predeterminado.
¿Cuál es la forma correcta de hacer esto?
python
getattr
getproperty
fundas
fuente
fuente

Respuestas:
La anulación
__getattr__debería estar bien:__getattr__solo se llama como último recurso, es decir, si no hay atributos en la instancia que coincidan con el nombre. Por ejemplo, si accedefoo.bar,__getattr__solo se llamará sifoono se ha llamado ningún atributobar. Si el atributo es uno que no desea manejar, aumenteAttributeError:Sin embargo, a diferencia de
__getattr__,__getattribute__se llamará primero (solo funciona para nuevas clases de estilo, es decir, aquellas que heredan del objeto). En este caso, puede conservar el comportamiento predeterminado de la siguiente manera:Vea los documentos de Python para más .
fuente
__getattr__¿alguna idea de qué hacer? (AttributeError: 'super' object has no attribute '__getattr__')AttributeErrorsin el contexto del atributo en los argumentos de excepción.fuente
self.__class__.__name__debería usarse en lugar deself.__class__en caso de que la clase se anule__repr__Para ampliar la respuesta de Michael, si desea mantener el comportamiento predeterminado utilizando
__getattr__, puede hacerlo así:Ahora el mensaje de excepción es más descriptivo:
fuente
__getattr__y__getattribute__?