私はdecoratorモジュールを使用していくつかの機能を装飾しています。 (限り、2つ以上の引数があるので)私は、デコレータはかなり一般的になりたいので、私はそれが引数とキーワード引数の任意の数を持つことができるようにしています:デコレータとキーワード引数の問題
from decorator import decorator
def wrap(f):
return decorator(_wrap, f)
def _wrap(function, t, f, *args, **kwargs):
print 't=', t
print 'f=', f
print 'args=', args
print 'kwargs=', kwargs
@wrap
def read(a, b, c=False, d=True):
pass
read(1, 2, d=True)
問題は上記の復帰ということです:
t= 1
f= 2
args= (,)
kwargs= {'c':False, 'd':True}
:、すなわち
t= 1
f= 2
args= (False, True)
kwargs= {}
が、False
とTrue
はc=
とd=
から来るので、彼らはkwargs
にすべきではありません
?
をd、デフ(A、B、C = Falseを読んで、 ''、私は2つの機能をラップ言います=真): ''と '' def read2(a、b、d = False、c = True): ''あなたはcとdが何の内側にあるのか分からないと言っていますか? '' d = ''が '' verbose = ''だったとし、 '' verbose = True''の場合にのみ_wrapの中に情報を出力したいと考えています。 – astrofrog
@astrofrog:argspecから推論することができます(本当に必要な場合)( 'inspect' stdlibモジュールを参照してください)。しかし、それがラッパーの情報ならば、おそらくラッパーはそれを明示的に引数として取るべきです(そしてラップされた関数に渡す可能性があります)。 – delnan