Python デコレータを学ぶ 2

デコレータに引数を渡す場合について「パーフェクト Python」に説明がありました。デコレータをさらにラップする関数を用意してそこで引数を受け取るようにすればよいみたいです。

# デコレータをラップした関数。引数 text を取る。
def show_message(text):
    def deco(func):
        def wrapper():
            print(text)
            return func()
        return wrapper
    return deco

デコレートされる関数を定義します。

@show_message('spam() called.')
def spam():
    print("Spam!")

# 実行する
spam()

すると引数で渡したテキスト 'spam() called.' を使ってデコレートできていることがわかります。

$ python decolate.py
spam() called.
Spam!

ふむふむ。

参照したページ

パーフェクトPython (PERFECT SERIES 5)
Pythonサポーターズ
技術評論社
売り上げランキング: 11,294