デコレータ@python

wxPythonとXRCedでGUIツールの作成法勉強中。
デコレータというPythonの機能に遭遇したので使い方と動きのメモ。funcの関数定義の一行上に@decoと書いてやれば、func(arg)を呼んだときに先にdecoを実行したあとでfuncを実行するというだけ。名前のとおりでもともとある関数をデコレート(装飾)する機能。引数の扱いがちょっとややこしいけど書いてみればきっとわかるはず。


テスト

# -*- coding: sjis -*-
def deco(func):
  def wrap(arg):
    print arg
    return func(arg)
  print "deco"
  return wrap

@deco
def func(arg):
  print "func"

if __name__ == '__main__':
  func("hoge")

実行結果

deco
hoge
func