デコレータを勉強していて、なるほどがあったのでメモ。
例えば、こういうのがあったとき。
def test_decorator(func): print('start decorator') func() print('end decorator') def test_method(): print('test method') test_decorator(test_method)
デコレータを使うと、以下のようにかける。
def test_decorator(func): print('start decorator') func() print('end decorator') @test_decorator def test_method(): print('test method') test_method
@
がやってるのは、修飾されたメソッドをデコレータメソッドに渡すだけ。別にcallableなメソッドを返さなくても良い。
よくある前後処理は、こういうこと。
def test_decorator(func): def decorated_method(*args, **kwargs): print('start decorator') result = func(*args, **kwargs) print('end decorator') return result return decorated_method @test_decorator def test_method(): print('test method') test_method()
decorated_method
みたいなデコレート済みのcallableなメソッドを返しているだけ。
エキスパートPythonプログラミング改訂2版に、もう少し詳しく書いてる。
- 作者: Michal Jaworski,Tarek Ziade,稲田直哉,芝田将,渋川よしき,清水川貴之,森本哲也
- 出版社/メーカー: KADOKAWA
- 発売日: 2018/02/26
- メディア: 単行本
- この商品を含むブログを見る