Sobes.tech
Junior — Middle

Care este rolul funcției functools.wraps în crearea decoratorilor în Python?

sobes.tech AI

Răspuns de la AI

Funcția functools.wraps este utilizată la crearea decoratorilor în Python pentru a păstra metadatele funcției originale pe care o înfășoară decoratorul. Fără utilizarea wraps, numele funcției, documentația (doc) și alte atribute sunt înlocuite cu cele ale funcției interne a decoratorului, ceea ce face mai dificil debugging-ul și documentarea.

Exemplu de utilizare:

import functools

def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Înainte de apelarea funcției")
        result = func(*args, **kwargs)
        print("După apelarea funcției")
        return result
    return wrapper

@my_decorator
def greet(name):
    "Funcție de salut"
    print(f"Salut, {name}!")

print(greet.__name__)  # Va afișa 'greet', nu 'wrapper'
print(greet.__doc__)   # Va afișa 'Funcție de salut'

Astfel, functools.wraps ajută la păstrarea informațiilor despre funcția decorată, ceea ce îmbunătățește lizibilitatea și întreținerea codului.