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プログラミングの可能性を広げることができます。

Pythonのクラスをデコレータ(@関数)で使用する #Python – Qiita

Pythonのデコレータを理解するまで – Zenn

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です