Я пишу декоратор, которому нужно вызвать другие функции до вызова функции, которую она украшает. Декорированная функция может иметь позиционные аргументы, но функции, которые вызовет декоратор, могут принимать только аргументы ключевых слов. Кто-нибудь имеет удобный способ преобразования позиционных аргументов в аргументы ключевых слов?
Я знаю, что могу получить список имен переменных украшенной функции:
>>> def a(one, two=2):
... pass
>>> a.func_code.co_varnames
('one', 'two')
Но я не могу понять, как сказать, что было принято в позиционном ключе и как было ключевое слово.
Мой декоратор выглядит так:
class mydec(object):
def __init__(self, f, *args, **kwargs):
self.f = f
def __call__(self, *args, **kwargs):
hozer(**kwargs)
self.f(*args, **kwargs)
Есть ли способ, отличный от сравнения kwargs и co_varnames, добавляя в kwargs ничего, что не там, и надеясь на лучшее?