Duplicar posible:
How can I programmatically change the argspec of a function in a python decorator?preservar argspec al decorar?
argspec es una gran manera de obtener argumentos de una función, pero no funciona cuando la función ha sido decorado:
def dec(func):
@wraps(func)
def wrapper(*a, **k)
return func()
return wrapper
@dec
def f(arg1, arg2, arg3=SOME_VALUE):
return
import inspect
print inspect.argspec(f)
-----------
ArgSpec(args=[], varargs='a', keywords='k', defaults=None)
Argspec debe devolver arg1
, arg2
, arg3
. Creo que necesito definir wrapper
de manera diferente para no usar *a
y **k
, pero no sé cómo.
Me alegra que haya un módulo de terceros que resuelva nuestro problema, así que gracias a @MuMind por señalarlo, pero * por qué * no lo maneja la propia biblioteca de Python '' functools.wraps'' decorador, como tú y yo esperábamos? Eso es exactamente para lo que es, después de todo. ¿Informe de error? – pmos
Para los interesados, abrí la lata de gusanos aquí: http://bugs.python.org/issue23764 – pmos