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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top