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
を使用したデコレータは、クラスメソッドの動作を柔軟に変更することができます。ただし、デコレータはコードの複雑性を増加させる可能性があるため、適切に使用することが重要です。