Position von @classmethod

7

Wo ist der Quellcode für die Decorator-Klassenmethode im Python-Quellcode? Insbesondere habe ich Probleme, die genaue Datei zu finden, die in Version 2.7.2 definiert ist.

    
user1200501 12.02.2012, 09:07
quelle

2 Antworten

11

Ich beantworte nicht, was Sie gefragt haben - aber unten zeigt, was ein Dekorator sein könnte, der classmethod entspricht, geschrieben in Pure Python - da der im Quellcode in C ist, innerhalb von Python-2.7.2/Objects/funcobject.c als Mishna seine Antwort eingibt.

Die Idee der Klassenmethoden besteht also darin, den Mechanismus "descriptor" zu verwenden, wie er in den Python-Daten beschrieben wird Modell - und machen Sie es so, dass die __get__ -Methode ein Funktionsobjekt zurückgibt, das beim Aufruf die ursprüngliche Methode mit dem ersten vorgefüllten Argument aufruft:

%Vor%

Und auf der Python-Konsole:

%Vor%

* BEARBEITEN - Aktualisieren *

Der O.P. fragte weiter "Wenn ich wollte, dass der Dekorator auch einen Parameter akzeptiert, was wäre das richtige Format für init?" -

In diesem Fall muss nicht nur __init__ geändert werden - ein Decorator, der Konfigurationsparameter akzeptiert, wird tatsächlich in "zwei Stufen" aufgerufen - der erste kennzeichnet die Parameter und gibt eine Callable zurück - der zweite Aufruf akzeptiert nur die Funktion, die tatsächlich dekoriert wird.

Es gibt ein paar Möglichkeiten, dies zu tun - aber ich denke, am einfachsten ist es, eine Funktion zu haben, die die obige Klasse zurückgibt, wie in:

%Vor%     
jsbueno 12.02.2012, 11:30
quelle
9
%Vor%     
Misha Akovantsev 12.02.2012 09:22
quelle

Tags und Links