クラス型デコレータのサンプルプログラム

『エキスパートPythonプログラミング改訂2版』を読みながら、デコレータをクラスとして実装するサンプルプログラムを書いてみる。

■プログラム名 kakko_deco.py

class KakkoDecorator:
    def __init__(self, function):
        self.function = function

    def __call__(self, *args, **kwargs):
        # 関数呼び出し前の処理
        result = self.function(*args, **kwargs)
        # 呼出し後の処理
        result = '[' + result + ']'
        return result

# デコレートされる関数
@KakkoDecorator
def get_message():
    return 'Hello, Decorator.'


if __name__ == '__main__':
    msg = get_message()
    print(msg)

■実行結果

$ python kakko_deco.py
[Hello, Decorator.]