参考文献
この質問を書く前に、私は次の興味深い質問のいくつかを参照しましたが、このシナリオは説明/カバーされていないと感じています。
- 関数デコレータのチェーンを作成するにはどうすればよいですか?(特に回答#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_2self - 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'