Pythonでは、デコレータは他の関数の機能を変更したり拡張したりすることができる関数です。デコレータは、関数やメソッドの前後にコードを追加することで、その動作を変更するためのパターンです。

デコレータの基本

デコレータは、他の関数を引数として受け取り、新しい関数を返す関数です。以下に基本的なデコレータの使用方法を示します。

def my_decorator(func):
    def wrapper():
        print("start")
        func()
        print("end")
    return wrapper

@my_decorator
def say_hello():
    print("hello")

say_hello()

このコードでは、my_decoratorというデコレータを定義し、say_hello関数に適用しています。@my_decoratorはPythonの糖衣構文で、say_hello関数をmy_decorator関数の引数として渡すことができます。

selfを使用したデコレータ

クラスメソッドにデコレータを適用する場合、デコレータ内の関数にselfを引数として追加することで、デコレータ内からインスタンス変数にアクセスすることができます。

class MyClass(object):
    def __init__(self):
        self.my_var = "my_var"

    def decorator(func):
        def inner(self, *args, **kwargs):
            print("pre func")
            print(self.my_var)
            func(self, *args, **kwargs)
            print("after_func")
        return inner

このコードでは、MyClassクラス内にdecoratorというデコレータを定義し、その内部でself.my_varにアクセスしています。

まとめ

Pythonのデコレータは、関数やメソッドの動作を変更する強力なツールです。特に、selfを使用したデコレータは、クラスメソッドの動作を柔軟に変更することができます。ただし、デコレータはコードの複雑性を増加させる可能性があるため、適切に使用することが重要です。

投稿者 admin

コメントを残す

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