クラス構造内にデコレータを書く方法はありますか?たとえば、これはクラスなしで正常に動作します:デコレータとクラス
def wrap1(func):
def loc(*args,**kwargs):
print 1
return func(*args,**kwargs)
return loc
def wrap2(func):
def loc(*args,**kwargs):
print 2
return func(*args,**kwargs)
return loc
def wrap3(func):
def loc(*args,**kwargs):
print 3
return func(*args,**kwargs)
return loc
def merger(func):
return wrap1(wrap2(wrap3(func)))
@merger
def merged():
print "merged"
@wrap1
@wrap2
@wrap3
def individually_wrapped():
print "individually wrapped"
merged()
individually_wrapped()
出力は次のようになります。
1
2
3
merged
1
2
3
individually wrapped
私が欲しいものです。しかし、ここではmerged
とindividually_wrapped
を静的メソッドまたはクラスメソッドにしたいとしましょう。これは、デコレータがクラス名前空間の外に置かれている限り、動作します。名前空間内にデコレータを配置する良い方法はありますか?私はむしろ動作しないすべての方法を列挙したくないですが、主な問題は、merger
がメソッドの場合、wrapX
メソッドにアクセスできないということです。たぶん、これはやりたい愚かなことですが、同じクラスのすべてのデコレータと装飾されたメソッドで、このような何かを得た人がいますか?
私はこれが進むべき道だと思います。クラス内でそれらを保つためには大きな理由がありません。 –