我正在编写一个装饰器,需要在调用它正在装饰的函数之前调用其他函数.修饰函数可能有位置参数,但装饰器将调用的函数只能接受关键字参数.有没有人有方便的方法将位置参数转换为关键字参数?
我知道我可以获得装饰函数的变量名列表:
>>> def a(one, two=2):
... pass
>>> a.func_code.co_varnames
('one', 'two')
Run Code Online (Sandbox Code Playgroud)
但我无法弄清楚如何判断位置传递的内容以及关键字是什么.
我的装饰师看起来像这样:
class mydec(object):
def __init__(self, f, *args, **kwargs):
self.f = f
def __call__(self, *args, **kwargs):
hozer(**kwargs)
self.f(*args, **kwargs)
Run Code Online (Sandbox Code Playgroud)
除了比较kwargs和co_varnames之外,还有其他方法,在kwargs中添加任何不在那里的东西,并希望最好的吗?