Python Decorators 備忘録

| コメント(0)
PythonのDecorators(デコレーター)について

まず、コードを見ながら動きを解説します。

関数で修飾する場合のコード例1:
{{{
def decoratorsTest(function):
    print function.__name__

@decoratorsTest
def functionTest():
    pass
}}}

出力結果:
functionTest
※修飾される関数の名「functionTest」が出力される

簡易解説:
1.@decoratorsTestが修飾対象の関数の直前にくる
2.decoratorsTestの引数「function」はfunctionTestと同じ
3.decorators(デコレーター)が呼び出されたときに関数が実行される

クラスで修飾する場合のコード例2:
{{{
class decoratorsTest:
    def __init__(self, function):
        self.function = function
        self.saved = []

    def __call__(self, *args):
        try:
            self.saved.append(args[0])
            print "saved", self.saved
            return self.function(*args)
        except Exception, e:
            print "Error %s" % (e)

@decoratorsTest
def functionTest(x):
    return "args", x

print functionTest(1)
print functionTest(2)
}}}

出力結果:
saved [1]
('args', 1)
saved [1, 2]
('args', 2)

簡易解説:
1.decoratorsが宣言された時に、__init__(コンストラクタ)が呼び出される
2.decoratorsの直下の関すが呼ばれたときに、__call__される
3.出力結果のように、saved メンバー変数は保持され続ける 









コメントする

このブログ記事について

このページは、jfkが2010年1月 4日 15:22に書いたブログ記事です。

ひとつ前のブログ記事は「あけましておめでとうございます。」です。

次のブログ記事は「スリランカ産直スパイス輸入手続き完了」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。