Как получить список параметров функции, охватываемой декоратором? - PullRequest
0 голосов
/ 26 декабря 2018

Я получаю список параметров функции следующим образом:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...