Functool.wraps:n Esittely
Pyyhkäise näyttääksesi valikon
Kun kirjoitat omia dekoratoreita, menetät usein alkuperäisestä funktiosta tärkeitä tietoja, kuten sen nimen, dokumentaatiomerkkijonon ja moduulin. Tämä johtuu siitä, että dekorattori korvaa alkuperäisen funktion uudella wrapper-funktiolla. Tämän korjaamiseksi käytä Pythonin standardikirjaston functools.wraps -dekorattoria.
Kun käytät functools.wraps wrapper-funktiossasi, säilytät alkuperäisen funktion metatiedot. Tämä tarkoittaa:
- Funktion
__name__-attribuutti pysyy samana kuin alkuperäisessä; - Funktion
__doc__-merkkijono säilyy muuttumattomana; __module__-attribuutti ja muut metatiedot säilyvät.
Metatietojen säilyttäminen on tärkeää virheenkorjauksessa, dokumentaation luonnissa ja työkaluissa, jotka hyödyntävät funktioiden introspektiota. Ilman functools.wraps-dekorattoria pinolokit ja apuohjelmat voivat näyttää hämmentävää tai virheellistä tietoa, mikä vaikeuttaa koodin ylläpitoa ja virheiden korjausta.
1234567891011121314151617181920212223from 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
Tässä näet, miten functools.wraps-dekorattoria käytetään alkuperäisen funktion metatietojen säilyttämiseen dekorattoria luodessa. Kun käytät functools.wraps wrapper-funktiossa, varmistat, että funktion nimi ja dokumentaatiomerkkijono eivät katoa dekoroinnin jälkeen.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme