初めてのPython第三版を読んでも完全にデコレータについて理解したとは言い切れないので、試しに作ってみた。
まずは、これ
def hoge(function): def bar(*args): print args print "hello" return bar @hoge def foo(): print "python" return foo()これ実行すると
() helloとなった。
上の構文は、翻訳すると下のようになる。
foo = hoge(foo) foo()hogeの引数内にて、functionが実行されていないのでpythonが表示されない。
def hoge(function): def bar(*args): print args function() print "hello" return bar @hoge def foo(): print "python" return foo()こうすると
() python helloとなる。
これは割りと早く理解できたのだが、問題は、class内で使われるデコレータである。
def foo(function): def bar(*args): print args print function(*args) + "world" return bar class Hoge(): @foo def say(self): return "hello" Hoge().say()これは、
hoge = Hoge() hoge.say = foo(hoge.say) hoge.say()と等価である。
0 コメント:
コメントを投稿