Heim > Backend-Entwicklung > Python-Tutorial > Was macht „functools.wraps' in Python-Dekoratoren?

Was macht „functools.wraps' in Python-Dekoratoren?

Mary-Kate Olsen
Freigeben: 2024-12-01 04:33:17
Original
738 Leute haben es durchsucht

What Does `functools.wraps` Do in Python Decorators?

Enthüllung der Funktionalitäten von functools.wraps

Im Bereich der Python-Dekoratoren stellt sich die Frage: Was ist der Zweck von functools.wraps? ?

Verständnis Dekoratoren

Dekoratoren ermöglichen es uns, die Funktionalität vorhandener Funktionen zu verbessern, indem wir sie mit benutzerdefinierter Logik umschließen. Dieser Umhüllungsprozess kann jedoch zum Verlust von Metadaten führen, die mit der ursprünglichen Funktion verknüpft sind, nämlich Name, Dokumentation und Argumentliste.

Wir stellen vor: functools.wraps

Hier kommt functools.wraps ins Spiel. Es handelt sich um einen Dekorateur, der das Problem des Metadatenverlusts angeht. Indem wir @wraps(func) auf eine Dekoratorfunktion anwenden, weisen wir den Dekorator an, die Metadaten der ursprünglichen Funktion zu erben.

Funktionsweise von functools.wraps

  • Behält den Funktionsnamen bei: Verhindert, dass der Name der dekorierten Funktion durch den Namen der ersetzt wird Dekorator.
  • Behält Docstring: Kopiert die Dokumentation der ursprünglichen Funktion in die dekorierte Funktion.
  • Argumente beibehalten: Stellt sicher, dass die dekorierte Funktion dieselbe behält Argumentsignatur als Originalfunktion.

Beispiel Verwendung

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

@logged
def f(x):
    """Computes a mathematical operation."""
    return x + x * x
Nach dem Login kopieren

Durch die Anwendung von @wraps(func) auf den protokollierten Dekorator stellen wir sicher, dass die umschlossene Funktion f ihren ursprünglichen Namen und ihre Dokumentation beibehält. und Argumentliste:

  • print(f.__name__) gibt aus 'f'
  • print(f.__doc__) gibt „Berechnet eine mathematische Operation aus.“

Fazit

functools.wraps spielt a Sie spielen eine entscheidende Rolle bei der Erhaltung der Metadaten von Funktionen, die mit Dekoratoren umschlossen sind, und stellen sicher, dass wesentliche Informationen nicht verloren gehen. Durch die Verwendung von @wraps(func) können wir flexible und informative Dekoratoren erstellen, die das Funktionsverhalten effektiv verbessern, ohne ihre ursprünglichen Eigenschaften zu beeinträchtigen.

Das obige ist der detaillierte Inhalt vonWas macht „functools.wraps' in Python-Dekoratoren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage