初めての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 コメント:
コメントを投稿