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