Heim >Backend-Entwicklung >Python-Tutorial >Wie behält „functools.wraps' die ursprünglichen Funktionsattribute in Python-Dekoratoren bei?

Wie behält „functools.wraps' die ursprünglichen Funktionsattribute in Python-Dekoratoren bei?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-12-01 21:10:15238Durchsuche

How Does `functools.wraps` Preserve Original Function Attributes in Python Decorators?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn