Получить аргумент в Python Decorator - PullRequest
0 голосов
/ 23 октября 2018
def deco_test(func):
    def inner_function(*args, **kwargs):
        return func(*args, **kwargs)
    return inner_function

@deco_test
def a(a='asdf', b='asdf'):
    pass

if __name__ == '__main__':
    a(456, 789)
    a(123, b='qwer/123/a.txt')
    a(a='098', b='789456')    

Я хочу получить аргумент, подобный этому:

  1. {'a': 456, 'b': 789}
  2. {'a': 123, 'b ':' qwer / 123 / a.txt '}
  3. {' a ':' 098 ',' b ':' 789456 '}

в deco_test(func)

1 Ответ

0 голосов
/ 23 октября 2018

Вы не получите доступ к параметру, который вы предоставляете для a внутри deco_test.Декорирование выполняется, когда функция объявлена, перед ее вызовом, и в этот момент у вас нет информации об этих аргументах.

Внутри inner_function вы получаете аргументы, как указано в вызове декорированной функцииa(456, 789) даст вам args=(456, 789).Если вы хотите отформатировать их в соответствии с аргументами, которые может принимать a, я думаю, что вы должны проверить функцию a.

...