Pythonのデコレータ構文
Pythonにはデコレータ構文というものがある。
これは、クラス、関数、メソッドをデコレートする構文だ。
今、
def foo():
print "Foo"
という関数があるとする。
この関数を実行すると、
Foo
と表示する。
さて、
- 関数を実行する前
- 関数を実行した後
- 関数の実行する前と後
に、必ず何か処理をさせたいのだが、その関数自体を修正したくはない、というのはよくあることだ。
こんな時に、デコレータ構文が役にたつ。
今、関数fooの前に事前処理(preprocess)をさせたい場合には、次のように書く。
def Pre(f):
def _():
print "Pre Process"
f()
return _
@Pre
def foo():
print "Foo"
関数fooを実行すると、
Pre Process
Foo
と表示される。
同様に、関数fooの後に、事後処理(postprocess)を実行させたい場合には、次のように書く。
def Post(f):
def _():
f()
print "Post Process"
return _
@Post
def foo():
print "Foo"
また、関数fooを事前処理と事後処理ではさみたい場合には、次のように書く。
def PreAndPost(f):
def _():
print "Pre Process"
f()
print "Post Process"
return _
@PreAndPost
def foo():
print "Foo"
このようにデコレータは、既存の関数やメソッドに修正を加えずに、ログ機能を織り込みたい場合などに効果的に使える機能だ。
★WOZ★
にほんブログ村
| 固定リンク
「Python」カテゴリの記事
- Pythonで一時ファイルを使う方法(2011.08.06)
- 一番最近更新したファイルを、Pythonで見つける方法(2011.04.24)
- Pythonでバイト列をUDPで送信する方法(2011.05.04)
- Pythonでファイルやディレクトリのリストを作る(2010.04.15)
- Pythonでエクセルブックにどんなシートがあるのかを調べる(2011.02.26)


コメント