Heim >Backend-Entwicklung >Python-Tutorial >Wie behält „functools.wraps' die ursprünglichen Funktionsattribute in Python-Dekoratoren bei?
Functools.wraps verstehen
In der Python-Programmierung werden Dekoratoren häufig verwendet, um Funktionen Funktionalität hinzuzufügen. Allerdings kann die Verwendung von Dekoratoren manchmal die ursprüngliche Funktion durch eine neue ersetzen, was zum Verlust wichtiger Funktionsattribute wie Name, Dokumentzeichenfolge und Argumentliste führt.
Hier kommt functools.wraps ins Spiel. Es handelt sich um einen Dekorator, der es Benutzern ermöglicht, beim Anwenden eines Dekorators die Attribute der ursprünglichen Funktion beizubehalten. Im Wesentlichen „umhüllt“ es die vom Dekorator erstellte neue Funktion mit den Attributen der ursprünglichen Funktion.
Betrachten Sie das folgende Beispiel:
def logged(func): @wraps(func) def with_logging(*args, **kwargs): print(func.__name__ + " was called") return func(*args, **kwargs) return with_logging
Wenn Sie diesen Dekorator verwenden, wird dies sichergestellt Die Funktion behält ihren ursprünglichen Namen, ihre Dokumentzeichenfolge und ihre Argumentliste bei, auch wenn sie durch die Protokollierungsfunktion geändert wurden. Hier ist ein Beispiel dafür, wie es funktioniert:
@logged def f(x): """does some math""" return x + x * x print(f.__name__) # prints 'f' print(f.__doc__) # prints 'does some math'
Ohne functools.wraps hätte der Dekorateur die ursprüngliche Funktionf durch eine neue Funktion mit einem anderen Namen und ohne Dokumentzeichenfolge ersetzt, was die Identifizierung und Interpretation erschwert das Verhalten der Funktion.
Das obige ist der detaillierte Inhalt vonWie behält „functools.wraps' die ursprünglichen Funktionsattribute in Python-Dekoratoren bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!