Sobes.tech
Junior — Middle

Qual è il ruolo della funzione functools.wraps nella creazione di decoratori in Python?

sobes.tech AI

Risposta dell'AI

La funzione functools.wraps viene utilizzata durante la creazione di decoratori in Python per preservare i metadati della funzione originale che il decoratore avvolge. Senza l'uso di wraps, il nome della funzione, la sua documentazione (doc) e altri attributi vengono sostituiti dagli attributi della funzione interna del decoratore, il che rende più difficile il debug e la documentazione.

Esempio di utilizzo:

import functools

def my_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        print("Prima di chiamare la funzione")
        result = func(*args, **kwargs)
        print("Dopo aver chiamato la funzione")
        return result
    return wrapper

@my_decorator
def greet(name):
    "Funzione di saluto"
    print(f"Ciao, {name}!")

print(greet.__name__)  # Mostrerà 'greet', non 'wrapper'
print(greet.__doc__)   # Mostrerà 'Funzione di saluto'

In questo modo, functools.wraps aiuta a mantenere le informazioni sulla funzione decorata, migliorando la leggibilità e la manutenzione del codice.