Chcę zastąpić __getattr__
metodę na klasie, aby zrobić coś wymyślnego, ale nie chcę przerywać domyślnego zachowania.
Jak to zrobić w odpowiedni sposób?
python
getattr
getproperty
płaszcze
źródło
źródło
Odpowiedzi:
Przesłanianie
__getattr__
powinno być w porządku -__getattr__
jest wywoływane tylko w ostateczności, tj. Jeśli w instancji nie ma atrybutów pasujących do nazwy. Na przykład, jeśli uzyskasz dostępfoo.bar
,__getattr__
zostanie wywołany tylko wtedy, gdy nie zostanie wywołanyfoo
żaden atrybutbar
. Jeśli atrybut nie jest obsługiwany, podnieśAttributeError
:Jednak w przeciwieństwie do
__getattr__
,__getattribute__
zostanie wywołany jako pierwszy (działa tylko dla klas nowego stylu, tj. Dziedziczących po obiekcie). W takim przypadku możesz zachować domyślne zachowanie:Zobacz dokumentację Python, aby uzyskać więcej .
źródło
__getattr__
żadnych pomysłów, co robić? (AttributeError: 'super' object has no attribute '__getattr__'
)AttributeError
bez kontekstu atrybutu w args wyjątku.