etwas drucken, wenn auf ein Attribut zugegriffen wird
-
21-12-2019 - |
Frage
Ich versuche, etwas zu drucken, wenn ich mithilfe von auf ein Attribut einer Klasse zugreife __getattribute__
Das große Problem hier ist die Rekursion und die Tatsache, dass ich die getattribute-Methode überschreibe.
Ich fürchte, ich muss Metaklasse verwenden, um dieses Problem zu lösen.Wie auch immer, wenn Sie eine Antwort auf dieses Problem haben.
Lösung
__getattribute__
wird verwendet für Zugriff auf alle Attribute auf Ihrer Instanz.Das beinhaltet self.recursion
in dieser Methode.
Du selten verwenden müssen __getattribute__
.Wenn Sie tatsächlich einen geeigneten Anwendungsfall dafür haben, vermeiden Sie den Zugriff oder die Verwendung von Attributen super(A, self).__getattribute__()
um unendliche Rekursionsprobleme zu vermeiden.
Verwenden Sie für Ihren Anwendungsfall (etwas drucken, wenn auf ein Attribut zugegriffen wird). super()
immer noch das ursprüngliche Attribut zurückgeben:
class A(object):
def meth(self):
return "met"
def __getattribute__(self, name):
print "IN CLASS A"
return super(A, self).__getattribute__(name)
Beachten Sie, dass für super()
Um zu funktionieren, müssen Sie eine Klasse neuen Stils verwenden, von der Sie erben object
.Wenn Sie von etwas anderem erben und dieses etwas andere hat __getattribute__
Methode ist es bereits eine Klasse neuen Stils.