Ich möchte die __getattr__
Methode für eine Klasse überschreiben , um etwas Besonderes zu tun, aber ich möchte das Standardverhalten nicht brechen.
Was ist der richtige Weg, um dies zu tun?
python
getattr
getproperty
sheats
quelle
quelle
Antworten:
Das Überschreiben
__getattr__
sollte in Ordnung sein -__getattr__
wird nur als letzter Ausweg aufgerufen, dh wenn die Instanz keine Attribute enthält, die mit dem Namen übereinstimmen. Wenn Sie beispielsweise darauf zugreifenfoo.bar
,__getattr__
wird nur aufgerufen, wennfoo
kein Attribut aufgerufen wurdebar
. Wenn das Attribut eines ist, das Sie nicht verarbeiten möchten, erhöhen SieAttributeError
:Doch im Gegensatz zu
__getattr__
,__getattribute__
zunächst wird (funktioniert nur für neue Stilklassen diejenigen also , dass vererben Objekt) bezeichnet. In diesem Fall können Sie das Standardverhalten wie folgt beibehalten:Weitere Informationen finden Sie in den Python-Dokumenten .
quelle
__getattr__
- irgendwelche Ideen, was zu tun ist? (AttributeError: 'super' object has no attribute '__getattr__'
)AttributeError
ohne den Kontext des Attributs in den Ausnahmeargumenten.quelle
self.__class__.__name__
sollte verwendet werden, anstatt für denself.__class__
Fall, dass die Klasse überschreibt__repr__
Um die Michael-Antwort zu erweitern
__getattr__
, können Sie Folgendes tun , wenn Sie das Standardverhalten beibehalten möchten :Jetzt ist die Ausnahmemeldung aussagekräftiger:
quelle
__getattr__
und__getattribute__
?