Я получаю список параметров функции следующим образом:
def foo(a, b, c):
# do something
return
print inspect.getargspec(foo)
Вывод:
ArgSpec(args=['a', 'b', 'c'], varargs=None, keywords=None, defaults=None)
Но если целевая функция имеет декоратор, результаты будут изменены:
def dec_func(func):
def wrapper(*args):
# do something
return func(*args)
return wrapper
@dec_func
def foo(a, b, c):
# do something
return
print inspect.getargspec(foo)
Теперь вывод:
ArgSpec(args=[], varargs='args', keywords=None, defaults=None)
Как видите, информация об обёртке в dec_func, а не foo, я хочу.
Любая идея о том, каквсе еще получаете информацию о Foo?
Кстати, почему я спрашиваю это: предположим, у меня есть функция A, и в некоторых других кодах я получаю список параметров функции A для проверки / выполнения чего-либо.Эта система будет сломана, если я добавлю декораторы к A, например, @ numba.jit или @profile ...
Решение найдено: https://hynek.me/articles/decorators/
from decorator import decorator
@decorator
def dec_func(func):
def wrapper(*args):
# do something
return func(*args)
return wrapper
@dec_func
def foo(a, b, c):
# do something
return
print inspect.getargspec(foo)
Вывод:
ArgSpec(args=['a', 'b', 'c'], varargs=None, keywords=None, defaults=None)