Junior — Middle
Jaká je role funkce functools.wraps při vytváření dekorátorů v Pythonu?
sobes.tech AI
Odpověď od AI
Funkce functools.wraps se používá při vytváření dekorátorů v Pythonu k zachování metadat původní funkce, kterou dekorátor obaluje. Bez použití wraps jsou jména funkcí, její dokumentace (doc) a další atributy nahrazeny atributy vnitřní funkce dekorátoru, což ztěžuje ladění a dokumentaci.
Příklad použití:
import functools
def my_decorator(func):
@functools.wraps(func)
def wrapper(*args, **kwargs):
print("Před voláním funkce")
result = func(*args, **kwargs)
print("Po volání funkce")
return result
return wrapper
@my_decorator
def greet(name):
"Funkce pozdravu"
print(f"Ahoj, {name}!")
print(greet.__name__) # Vytiskne 'greet', ne 'wrapper'
print(greet.__doc__) # Vytiskne 'Funkce pozdravu'
Tímto způsobem pomáhá functools.wraps zachovat informace o dekorované funkci, což zlepšuje čitelnost a údržbu kódu.