def decorated(f):
@functools.wraps(f)
def wrapper():
return f()
return wrapper
@decorated
def g():
pass
functools.wraps
fa il suo lavoro a preservare il nome della g
:La funzione decorata usando functools.wraps solleva TypeError con il nome del wrapper. Perché? Come evitare?
>>> g.__name__
'g'
Ma se mi passa un argomento per g
, ho un TypeError
contenente il nome della confezione:
>>> g(1)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: wrapper() takes no arguments (1 given)
Da dove viene questo nome? Dove è conservato? E c'è un modo per rendere l'eccezione simile a g() takes no arguments
?
Correlati: http://stackoverflow.com/q/29488327/3001761 – jonrsharpe