Pythonのデコレータは、関数やクラスの前後に特定の処理を追加する強力な機能です。特に、クラスデコレータはその柔軟性から多くの可能性を秘めています。
クラスデコレータの基本
クラスデコレータは、関数のデコレータとは異なり、クラス内の変数や関数を保持できるため、できることが増えます。
class myDecorator(object):
def my_decorator(self, my_func):
def decorator_wrapper(*args, **kwargs):
print('--- decorator before my_func ---')
my_func(*args, **kwargs)
print('--- decorator after my_func ---\\n')
return decorator_wrapper
decorator = myDecorator()
@decorator.my_decorator
def print_hello():
print('hello world')
print_hello()
この例では、myDecorator
クラスがデコレータとして機能しています。my_decorator
メソッドは、デコレートされる関数を引数として受け取り、その前後に特定の処理(ここではprint文)を追加します。
クラスデコレータの応用
クラスデコレータは、その状態を保持する能力を利用して、より高度な機能を実現することができます。例えば、以下の例では、デコレータが関数の呼び出し回数をカウントしています。
class myDecorator(object):
def __init__(self, interval):
self.interval = interval
self.count = 0
def my_decorator(self, my_func):
def decorator_wrapper(*args, **kwargs):
print('decorator count:{}'.format(self.count))
self.count = self.count + self.interval
my_func(*args, **kwargs)
return decorator_wrapper
decorator = myDecorator(2)
@decorator.my_decorator
def print_hello():
print('hello world')
print_hello()
print_hello()
print_hello()
- このように、Pythonのクラスデコレータは、コードの再利用性と可読性を向上させるための強力なツールです。適切に使用することで、Pythonプログラミングの可能性を広げることができます。