関数に付加機能をつけるということ
Rubyのアラウンドエイリアスに似ているけど、実際どうなのだろう。
ほぼまるこぴ。
Python のデコレータ式 (1) | すぐに忘れる脳みそのためのメモ
# -*- coding: utf-8 -*- # 関数Dに関数hogeを突っ込み、疑似デコレータとする def D(f): print u"デコレータが実行された1" return f def hoge(): print "hoge1" hoge = D(hoge) hoge() # デコレータが実行された1 # hoge1 def D(f): print u"デコレータが実行された2" return f # デコレータを適用したときに、関数 D が適用される。 @D def hoge(): print "hoge2" hoge() # デコレータが実行された2 # hoge2 def D(f): def _(): print "*__" * 10 f() print "*__" * 10 return _ def hoge(): print "hoge1" # デコレータ関数 D を適用する前 print "before decoration: 1" hoge() # デコレータ関数 D を関数 hoge に適用 hoge = D(hoge) # デコレータ関数 D を関数 hoge に適用した後 print "after decoration: 1" hoge() # before decoration: 1 # hoge1 # after decoration: 1 # *__*__*__*__*__*__*__*__*__*__ # hoge1 # *__*__*__*__*__*__*__*__*__*__ def D(f): def _(): print "*--" * 10 f() print "--*" * 10 return _ @D def hoge(): print "hoge2" hoge() @D def piyo(): print "piyo1" piyo() # *--*--*--*--*--*--*--*--*--*-- # hoge2 # --*--*--*--*--*--*--*--*--*--* # *--*--*--*--*--*--*--*--*--*-- # piyo1 # --*--*--*--*--*--*--*--*--*--* def fuga(func): print 'fuga' return func def bar(): print 'bar' bar() # bar @fuga def bar(): print 'bar' bar() # fuga # bar
最後のところは下を参考にしました