2009-01-26 6 views
44

Ich kenne @staticmethod, @classmethod und @property, aber nur durch verstreute Dokumentation. Gibt es eine vollständige Liste von Funktionsdekoratoren, die in Python integriert sind?Python - Gibt es irgendwo eine Liste von Dekorateuren?

+0

Es gibt keine offizielle Liste, aber dieser Link ist nützlich: https://github.com/lord63/awesome-python-decorator – Casebash

Antwort

28

Ich glaube nicht. Dekorateure unterscheiden sich nicht von gewöhnlichen Funktionen, Sie nennen sie nur raffinierter.

Für sie alle zu finden, versuchen Built-in functions Liste suchen, weil, wie Sie in Python glossary der Dekorateur Syntax nur syntaktischer Zucker ist zu sehen, wie die beiden folgenden Definitionen gleich Funktionen erstellen (in diesem Beispiel aus Glossar kopiert):

def f(...): 
    ... 
f = staticmethod(f) 

@staticmethod 
def f(...): 

So kann jede eingebaute Funktion, die eine andere Funktion zurückgibt, als Dekorateur verwendet werden. Die Frage ist - macht es Sinn, es so zu benutzen? :-)

functools Modul enthält einige Funktionen, die als Dekoratoren verwendet werden können, aber sie sind keine integrierten Bausteinen, nach denen Sie gefragt haben.

12

Sie sind nicht eingebaut, aber this library von Beispiel Dekoratoren wenn sehr gut.

Als Abgan says ist die eingebaute Funktionsliste wahrscheinlich der beste Ort, um zu sehen, obwohl als Dekoratoren auch als Klassen implementiert werden können, ist es nicht garantiert, umfassend zu sein.

-2

Es gibt keine Liste aller Dekoratoren. Es gibt keine Liste aller Funktionen. Es gibt keine Liste aller Klassen.

Dekoratoren sind ein praktisches Werkzeug zum Definieren eines gemeinsamen Aspekts über Funktionen, Methoden oder Klassen hinweg. Es gibt die eingebauten Dekorateure. Außerdem gibt es jede Menge coole und nutzlose Dekorateure. Genauso gibt es eine Anzahl cooler und nutzloser Klassen.

1

Dekoratoren müssen nicht einmal eine Funktion zurückgeben. Ich habe @atexit.register vorher benutzt.

+0

Gut, dass man die gleiche Funktion zurückgibt, die für genau diesen Zweck übergeben wurde. –

+0

Oh, oder? Ich habe es nie bemerkt. – habnabit

+1

"Dekorierer müssen nicht einmal eine Funktion zurückgeben" - um es sinnvoll zu machen, sollten sie aber, da '@ decor' nur Zucker für' f = decor (f) 'ist - sonst verlieren Sie die Referenz zu der Funktion, die du dekorierst. –

Verwandte Themen