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á sifoo
no 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__'
)AttributeError
sin 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__
?