Wie funktioniert ein Klassenmethodenobjekt?

7

Ich habe Probleme zu verstehen, wie ein Klassenobjekt in Python funktioniert, insbesondere im Zusammenhang mit Metaklassen und in __new__ . In meinem speziellen Fall möchte ich den Namen eines Klassenmethodemitglieds erhalten, wenn ich die members durchlaufen habe, die __new__ erhalten haben.

Bei normalen Methoden wird der Name einfach in einem __name__ -Attribut gespeichert, aber für eine Klassenmethode gibt es anscheinend kein solches Attribut. Ich sehe nicht einmal, wie die Klassenmethode aufgerufen wird, da es auch kein Attribut __call__ gibt.

Kann mir jemand erklären, wie eine Unterrichtsmethode funktioniert oder auf eine Dokumentation verweisen? Das Googeln führte mich nirgendwohin. Danke!

    
nikow 04.11.2009, 23:46
quelle

2 Antworten

18

Ein classmethod -Objekt ist ein Deskriptor. Sie müssen verstehen, wie Deskriptoren funktionieren.

Kurz gesagt, ein Deskriptor ist ein Objekt mit einer Methode __get__ , die drei Argumente benötigt: self , ein instance und ein instance type .

Wenn bei der normalen Attributsuche ein nachgeschlagenes Objekt A eine Methode __get__ hat, wird diese Methode aufgerufen, und das Ergebnis wird anstelle des Objekts A ersetzt. Auf diese Weise werden Funktionen (die auch Deskriptoren sind) gebundene Methoden, wenn Sie eine Methode für ein Objekt aufrufen.

%Vor%

Ein classmethod -Objekt funktioniert auf die gleiche Weise. Wenn es nachgeschlagen wird, wird seine Methode __get__ aufgerufen. Die __get__ einer Klassenmethode verwirft das Argument, das der instance entspricht (falls es eine gab) und übergibt nur die instance_type , wenn sie __get__ für die umbrochene Funktion aufruft.

Ein illustratives Gekritzel:

%Vor%

Weitere Informationen zu Deskriptoren finden Sie hier (ua): Ссылка

Für die spezifische Aufgabe, den Namen der Funktion zu erhalten, die von einem classmethod umschlossen ist:

%Vor%     
Matt Anderson 05.11.2009, 00:49
quelle
1

Das sieht so aus, als hätte es die Waren.

    
Ewan Todd 05.11.2009 00:06
quelle

Tags und Links