Dekoratoren in Python können entweder Funktionen oder Klassen sein. In den vorherigen Abschnitten haben wir Funktionsdekoratoren verwendet. Jetzt lernen wir, wie man Klassendekoratoren definiert.
Wir werden eine benutzerdefinierte Klasse definieren, die als Dekorateur fungiert. Wenn eine Funktion mit einer Klasse dekoriert/geändert wird, wird die Funktion zu einer Instanz dieser Klasse. Finden wir es heraus:
Wie oben gezeigt, haben wir einen einfachen Klassendekorator erstellt. Damit eine Klasse zum Dekorator wird, muss sie die Methode __call__() implementieren. Die Methode __call__() funktioniert genauso wie eine Wrapper-Funktion in einem Funktionsdekorator.
Lassen Sie uns nun diese Klasse verwenden, um eine Funktion zu dekorieren:
Die Ausgabe der Programmausführung ist wie folgt: # 🎜🎜## 🎜🎜#
Klassendekorator mit *args- und **kwargs-Parametern
Im obigen Code akzeptiert die __call__()-Methode des Klassendekorators *args- und **kwargs-Parameter . In der Codezeile übergibt die Aufrufmethode sie an die dekorierte Funktion: self.func(*args,**kwargs).
Jetzt verwenden wir diesen Klassendekorator, um eine Funktion zu dekorieren:
Klassendekoration Dekorationsfunktion
#🎜 🎜 #Das Ausgabeergebnis der Ausführung des Programms ähnelt dem folgenden:Hallo Solo Cui
Klassendekorator mit Return-Anweisung #🎜 🎜#Denken Sie daran, dass wir in der Wrapper-Funktion des Funktionsdekorators das Schlüsselwort return verwenden können, um die dekorierte Funktion zurückzugeben. Wir machen hier dasselbe, aber innerhalb der __call__-Methode.
Der Klassendekorator, der das Ergebnis zurückgibtDas Ausgabeergebnis der Programmausführung lautet wie folgt:
#🎜 🎜#TRACY CUI
Wie oben gezeigt, geben wir die geänderte Funktion in der __call__-Methode zurück:return self.func(* args ,**args)
An diesem Punkt ist die Einführung in Pythons Dekoratoren abgeschlossen.Das obige ist der detaillierte Inhalt vonPython-Programmierung: Wie implementiert man Klassendekoratoren und Anwendungen? Wichtige Punkte, die es zu begreifen gilt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!