Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Lære Introduksjon til functool.wraps | Mastering Python-Iteratorer og Dekoratører
Funksjonelle Programmeringskonsepter i Python

bookIntroduksjon til functool.wraps

Sveip for å vise menyen

Når du skriver egne dekoratører, mister du ofte viktig informasjon om den opprinnelige funksjonen, som navn, docstring og modul. Dette skjer fordi dekoratøren erstatter den opprinnelige funksjonen med en ny wrapper-funksjon. For å løse dette, bruk dekoratøren functools.wraps fra Pythons standardbibliotek.

Ved å bruke functools.wraps på wrapper-funksjonen din, bevarer du metadataene til den opprinnelige funksjonen. Dette betyr:

  • Funksjonens __name__-attributt forblir det samme som originalen;
  • Funksjonens __doc__-streng beholdes uendret;
  • __module__-attributtet og annen metadata bevares.

Å bevare metadata er viktig for feilsøking, dokumentasjonsgenerering og verktøy som er avhengige av funksjonsintrospeksjon. Uten functools.wraps kan stack traces og hjelpeverktøy vise forvirrende eller feil informasjon, noe som gjør koden vanskeligere å vedlikeholde og feilsøke.

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 hvordan du bruker functools.wraps for å bevare metadataene til den opprinnelige funksjonen når du lager en dekoratør. Ved å bruke functools.wraps på wrapperen sikrer du at attributter som funksjonens navn og docstring ikke går tapt etter dekorering.

question mark

Hvorfor er det viktig å bruke functools.wraps når man skriver dekoratører i Python?

Velg det helt riktige svaret

Alt var klart?

Hvordan kan vi forbedre det?

Takk for tilbakemeldingene dine!

Seksjon 4. Kapittel 7

Spør AI

expand

Spør AI

ChatGPT

Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår

Seksjon 4. Kapittel 7
some-alt