Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lära Introduktion till functool.wraps | Bemästra Python-Iteratorer och Dekoratorer
Funktionella Programmeringskoncept i Python

bookIntroduktion till functool.wraps

Svep för att visa menyn

När du skriver egna dekoratörer förlorar du ofta viktig information om den ursprungliga funktionen, såsom dess namn, docstring och modul. Detta händer eftersom dekoratören ersätter den ursprungliga funktionen med en ny wrapper-funktion. För att åtgärda detta, använd dekoratören functools.wraps från Pythons standardbibliotek.

Genom att använda functools.wraps på din wrapper-funktion bevarar du den ursprungliga funktionens metadata. Detta innebär:

  • Funktionens __name__-attribut förblir detsamma som originalet;
  • Funktionens __doc__-sträng bevaras;
  • Attributet __module__ och annan metadata bevaras.

Att bevara metadata är viktigt för felsökning, dokumentationsgenerering och verktyg som förlitar sig på funktionsinspektion. Utan functools.wraps kan stacktraces och hjälpfunktioner visa förvirrande eller felaktig information, vilket gör din kod svårare att underhålla och felsöka.

1234567891011121314151617181920212223
from functools import wraps # Define a decorator that will wrap another function def my_decorator(func): # Use @wraps to preserve metadata from the original function @wraps(func) def wrapper(*args, **kwargs): # This code runs before the original function print("Running the decorated function...") return func(*args, **kwargs) # Call the original function return wrapper # Return the wrapper as the new decorated function # Apply the decorator to a function def say_hello(): """Prints a hello message.""" print("Hello!") say_hello = my_decorator(say_hello) say_hello() # Print out the preserved metadata print(f"Function name: {say_hello.__name__}") # Name is preserved print(f"Docstring: {say_hello.__doc__}") # Docstring is preserved
copy

Du kan se hur du använder functools.wraps för att bevara den ursprungliga funktionens metadata när du skapar en dekoratör. Genom att använda functools.wraps på din wrapper säkerställer du att attribut som funktionens namn och docstring inte går förlorade efter dekoreringen.

question mark

Varför är det viktigt att använda functools.wraps när man skriver dekoratörer i Python?

Vänligen välj det korrekta svaret

Var allt tydligt?

Hur kan vi förbättra det?

Tack för dina kommentarer!

Avsnitt 4. Kapitel 7

Fråga AI

expand

Fråga AI

ChatGPT

Fråga vad du vill eller prova någon av de föreslagna frågorna för att starta vårt samtal

Avsnitt 4. Kapitel 7
some-alt