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.
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:
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%Tags und Links python decorator python-2.7