
232
第 6 章 関数とクラス
...
>>> Spam.metaspam #
クラスの属性を参照すると、メタクラスも検索される
'spam!'
>>> Spam().metaspam #
インスタンス属性を参照すると、メタクラスは検索されない
Traceback (most recent call last):
File "<input>", line 1, in <module>
AttributeError: 'Spam' object has no attribute 'metaspam'
>>>
6.5
デコレータ
Python
では、「関数を引数として受け取り、戻り値として関数を返す」関数を、他の関数でラッ
プした新しい関数の作成や、関数のフレームワークやサービスへの登録などに利用できます。この
ような使い方をする関数を、デコレータと呼びます。
print_deco()
は、関数を受け取り、受け取った関数を出力して、そのまま返す単純なデコレー
タです。
def print_deco(func):
print(func)
return func
print_deco()
に、別の関数を指定して実行すると、次のようになります。
>>> def spam():
... print('spam!')
...
>>> ret_func = print_deco(spam)
<function spam at 0x109fb47a0>
>>> ret_func() # print_deco
の戻り値は、
spam
関数
spam! ...