Sobes.tech
Junior — Middle

Akú úlohu má funkcia functools.wraps pri vytváraní dekorátorov v Pythone?

sobes.tech AI

Odpoveď od AI

Funkcia functools.wraps sa používa pri vytváraní dekorátorov v Pythone na zachovanie metadát pôvodnej funkcie, ktorú dekorátor obklopí. Bez použitia wraps sú názov funkcie, jej dokumentácia (doc) a ďalšie atribúty nahradené atribútmi vnútornej funkcie dekorátora, čo sťažuje ladenie a dokumentáciu.

Príklad použitia:

import functools

def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Pred volaním funkcie")
        result = func(*args, **kwargs)
        print("Po volaní funkcie")
        return result
    return wrapper

@my_decorator
def greet(name):
    "Funkcia pozdravu"
    print(f"Ahoj, {name}!")

print(greet.__name__)  # Vytlačí 'greet', nie 'wrapper'
print(greet.__doc__)   # Vytlačí 'Funkcia pozdravu'

Týmto spôsobom pomáha functools.wraps zachovať informácie o dekorovanej funkcii, čo zlepšuje čitateľnosť a údržbu kódu.