Python decorator - 関数のデコレーターを作り、それらを連鎖させるには?

Python decorator class / python / decorator / python-decorators

Pythonで以下のような2つのデコレーターを作るにはどうしたらいいでしょうか?

@makebold
@makeitalic
def say():
   return "Hello"

...返されるはずです:

"<b><i>Hello</i></b>"

John Kugelman



Answer #1

もちろん、デコレーター関数からラムダを返すこともできます。

def makebold(f): 
    return lambda: "<b>" + f() + "</b>"
def makeitalic(f): 
    return lambda: "<i>" + f() + "</i>"

@makebold
@makeitalic
def say():
    return "Hello"

print say()