参考文献
この質問を書く前に、私は次の興味深い質問のいくつかを参照しましたが、このシナリオは説明/カバーされていないと感じています。
- 関数デコレータのチェーンを作成するにはどうすればよいですか?(特に回答#2)
- クラス内のメソッドを装飾する方法は?
- クラスのPythonデコレータ
- メソッドまたは関数を装飾できるパラメーターを備えたPythonクラスベースのデコレーター(近いが、私が求めているものとは正確には一致しない)
私はfunction
次のようにしています:
def simple_function():
print 'this is a simple_function'
そして、私はclass
いくつかで以下を持っていますmethods
class Test:
def Test_method_1(self, func, args=None, kwargs=None):
print 'this is Test::Test_method_1'
<execute some instructions here>
def Test_method_2(self):
print 'this is Test::Test_method_2'
私は次のように使用Test_method_1
しsimple_function
ています:
t = Test()
t.Test_method_1(simple_function)
simple_function
が任意の引数を取る場合、は次のTest_method_1
ように呼び出されます。
def simple_function(a, b, c, d=f, g=h):
print 'this is a simple_function'
t = Test()
t.Test_method_1(simple_function, args=[a, b, c], kwargs={d:f, g:h})
Test_method_2
さて、のとして使いたいdecorator version
ですTest_method_1
。したがって、simple_function
定義は次のように書くことができます。
t = Test()
@t.Test_method_2
def simple_function():
print 'this is a simple_function'
注:は適切な引数を使用してTest_method_2
呼び出します。Test_method_1
今の質問:
- 1-これは可能ですか?
- 2-可能であれば、装飾された関数の名前(ここ)は(を含む)
simple_function
への引数としてどのように渡されますか?Test_method_2
self
- 3- [ここにキラーの質問があると思います]
Test_method_2
(デコレータ)とsimple_function
(デコレーションされる関数)の両方に任意の引数を渡したい--引数(を含む)を受け取るためにを*args and **kwargs
どのTest_method_2
ように定義する必要がありますself
か?
Test_method_2
両方の任意の引数を持つのデコレータとしての使用法はsimple_function
次のとおりです。
t = Test()
@t.Test_method_2(a, b, c, d, e=f, g=h)
def simple_function(x, y, z, n=m):
print 'this is a simple_function'