次のデコレータとクラスがあります。
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')
どの出力:
> checking headers...
> auth passed
> (('arg',), {'kw': 'kwarg'})
> {}
しかし、私はこれを期待していますか:
> checking headers...
> auth passed
> ('arg',)
> {'kw': 'kwarg'}
元のメソッド (work()) が実行されているときに、装飾後に args/kwargs がタプルに入れられるのはなぜですか?
私はそれを取り除くことを知っています
def auth(fn):
return fn
パラメータは正しく返されますが、返す前にワーカー インスタンス (自己) でいくつかの作業を行う必要があります。私は確かにデコレータについて何かを見逃していました。
ありがとう!