Junior — Middle
Jaka jest rola funkcji functools.wraps przy tworzeniu dekoratorów w Pythonie?
sobes.tech AI
Odpowiedź od AI
Funkcja functools.wraps jest używana podczas tworzenia dekoratorów w Pythonie, aby zachować metadane oryginalnej funkcji, którą dekorator opakowuje. Bez użycia wraps, nazwa funkcji, jej dokumentacja (doc) i inne atrybuty są zastępowane przez atrybuty funkcji wewnętrznej dekoratora, co utrudnia debugowanie i dokumentację.
Przykład użycia:
import functools
def my_decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print("Przed wywołaniem funkcji")
result = func(*args, **kwargs)
print("Po wywołaniu funkcji")
return result
return wrapper
@my_decorator
def greet(name):
"Funkcja powitania"
print(f"Cześć, {name}!")
print(greet.__name__) # Wyświetli 'greet', a nie 'wrapper'
print(greet.__doc__) # Wyświetli 'Funkcja powitania'
W ten sposób, functools.wraps pomaga zachować informacje o dekorowanej funkcji, co poprawia czytelność i utrzymanie kodu.