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.