デコレータに引数を渡す場合について「パーフェクト 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)
posted with amazlet at 13.04.21
Pythonサポーターズ
技術評論社
売り上げランキング: 11,294
技術評論社
売り上げランキング: 11,294