functools.update_wrapper
Este post fue migrado de un blog hecho con Wordpress. Si se ve mal, dejame un comentario y lo arreglo.
Este post se alinea con la serie Decoradores en Python (I, II, III) pero no es tan elaborado como para ser Decoradores en Python (IV) :)
Desde Python 2.5, al crear un decorador, se puede utilizar functools.update_wrapper para quela versión decorada de la función, tenga los atributos name, doc, module y dict de la función original.
>>> import functools>>> def deco(f):
... def inner(a, *kw):
... print "Este decorador no hace nada"
... return f(a, *kw)
... return inner
...
>>> def saludo():
... print "hola"
...
>>> saludo2 = deco(saludo)
>>> saludo2()
Este decorador no hace nada
hola
>>> saludo2.name
'inner'
>>> def deco(f):
... def inner(a, *kw):
... print "Este decorador no hace nada"
... return f(a, *kw)
... return functools.update_wrapper(inner, f)
...
>>> saludo3 = deco(saludo)
>>> saludo3()
Este decorador no hace nada
hola
>>> saludo3.name
'saludo'
>>> saludo = saludo3
Comentarios