Sobes.tech
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.