Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Leer Introductie van functools.wraps | Meesterschap in Python-Iterators en Decorateurs
Functionele Programmeerconcepten in Python

bookIntroductie van functools.wraps

Veeg om het menu te tonen

Wanneer je je eigen decorators schrijft, verlies je vaak belangrijke informatie over de oorspronkelijke functie, zoals de naam, docstring en module. Dit gebeurt omdat de decorator de oorspronkelijke functie vervangt door een nieuwe wrapperfunctie. Om dit te voorkomen, gebruik je de functools.wraps decorator uit de standaardbibliotheek van Python.

Door functools.wraps toe te passen op je wrapperfunctie, behoud je de metadata van de oorspronkelijke functie. Dit betekent:

  • Het __name__ attribuut van de functie blijft hetzelfde als het origineel;
  • De __doc__ string van de functie blijft behouden;
  • Het __module__ attribuut en andere metadata blijven behouden.

Het behouden van metadata is belangrijk voor debugging, documentatiegeneratie en tools die afhankelijk zijn van functie-introspectie. Zonder functools.wraps kunnen stacktraces en hulpprogramma's verwarrende of onjuiste informatie tonen, waardoor je code moeilijker te onderhouden en te debuggen is.

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

Je ziet hier hoe je functools.wraps gebruikt om de metadata van de oorspronkelijke functie te behouden bij het maken van een decorator. Door functools.wraps toe te passen op je wrapper, zorg je ervoor dat attributen zoals de functienaam en docstring niet verloren gaan na decoratie.

question mark

Waarom is het belangrijk om functools.wraps te gebruiken bij het schrijven van decorators in Python?

Selecteer het correcte antwoord

Was alles duidelijk?

Hoe kunnen we het verbeteren?

Bedankt voor je feedback!

Sectie 4. Hoofdstuk 7

Vraag AI

expand

Vraag AI

ChatGPT

Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.

Sectie 4. Hoofdstuk 7
some-alt