Powiel możliwe:
How can I programmatically change the argspec of a function in a python decorator?zachować dekorację argspec podczas dekorowania?
argspec to świetny sposób, aby uzyskać argumenty funkcji, ale to nie działa, gdy funkcja został odznaczony:
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 powinien zwrócić arg1
, arg2
, arg3
. Myślę, że muszę zdefiniować wrapper
inaczej, niż nie używać *a
i **k
, ale nie wiem jak.
Cieszę się, że istnieje moduł trzeciej strony, który rozwiązuje nasz problem, więc dzięki @MuMind za wskazanie go, ale * dlaczego * nie jest obsługiwane przez własną bibliotekę Pythona '' functools.wraps'' dekorator, jak oboje się spodziewaliśmy? W końcu to jest właśnie to. Zgłoszenie błędu? – pmos
Dla zainteresowanych otworzyłem puszkę z robakami: http://bugs.python.org/issue23764 – pmos