Decorator args and kwargs returned within tuple
我有以下装饰和课程。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | def auth(fn): def check_headers(self): print 'checking headers...' #self.headers work done here def inner(self, *args, **kwargs): check_headers(self) fn(self, args, kwargs) return inner class Worker(object): @auth def work(self, *args, **kwargs): print 'auth passed' print args print kwargs worker_obj = Worker() worker_obj.work('arg', kw='kwarg') |
哪个输出:
1 2 3 4 | > checking headers... > auth passed > (('arg',), {'kw': 'kwarg'}) > {} |
但我期待这个:
1 2 3 4 | > checking headers... > auth passed > ('arg',) > {'kw': 'kwarg'} |
为什么在运行原始方法(work())后,args / kwargs会被置于元组中?
我知道剥离它
1 2 | def auth(fn): return fn |
正确返回参数,但我需要在返回之前对worker实例(self)做一些工作。 我肯定错过了装饰师的一些东西。
谢谢!
当你调用
1 | fn(self, *args, **kwargs) |
这意味着当你拨打
您可以在此处查看相关文档。
因为你把
1 2 3 | def inner(self, *args, **kwargs): check_headers(self) fn(self, *args, **kwargs) |