Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Oppiskele Functool.wraps:n Esittely | Python-iterointien ja Dekoraattoreiden Hallinta
Funktionaalisen Ohjelmoinnin Käsitteet Pythonissa

bookFunctool.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.

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

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.

question mark

Miksi functools.wraps-funktion käyttö on tärkeää, kun kirjoitetaan dekoratoreita Pythonissa?

Valitse oikea vastaus

Oliko kaikki selvää?

Miten voimme parantaa sitä?

Kiitos palautteestasi!

Osio 4. Luku 7

Kysy tekoälyä

expand

Kysy tekoälyä

ChatGPT

Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme

Osio 4. Luku 7
some-alt