この記事では、Pythonでよく用いられるデコレータ関数について詳しく解説します。デコレータの基本的な概念から、具体的なコード例とその解説、そして応用例までを網羅しています。
目次
デコレータ関数とは
デコレータ関数とは、他の関数を引数として受け取り、何らかの処理を加えた上で新しい関数として返す高階関数です。主に関数の振る舞いを修飾する目的で使われます。
基本的な使い方
一般的なデコレータ関数の使い方は以下のようになります。
@decorator
def function_to_decorate():
print("This is the original function.")
この例では、`@decorator` という構文で `function_to_decorate` という関数にデコレータ関数 `decorator` を適用しています。
デコレータ関数の基本的な作成方法
デコレータ関数を作成する基本的な方法について解説します。
単純なデコレータ関数
最も単純なデコレータ関数は以下のようになります。
def my_decorator(func):
def wrapper():
print("Something is happening before the function is called.")
func()
print("Something is happening after the function is called.")
return wrapper
このデコレータ関数`my_decorator`は、引数として関数`func`を受け取り、新しい関数`wrapper`を返します。
デコレータ関数の応用例
次に、デコレータ関数の応用例をいくつか紹介します。
引数を持つデコレータ関数
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for _ in range(n):
func(*args, **kwargs)
return wrapper
return decorator
このデコレータは、指定された回数だけ関数を繰り返し実行します。
クラスベースのデコレータ
class CountCalls:
def __init__(self, func):
self.func = func
self.num_calls = 0
def __call__(self, *args, **kwargs):
self.num_calls += 1
print(f"This is call number {self.num_calls}")
return self.func(*args, **kwargs)
このデコレータは、関数が何回呼ばれたかをカウントします。
複数のデコレータの組み合わせ
@decorator1
@decorator2
def my_function():
print("This is my function.")
このように複数のデコレータを一つの関数に適用することも可能です。
まとめ
Pythonのデコレータ関数は、関数の振る舞いを独自に制御するための強力なツールです。基本形から応用例まで、多くの用途で利用されています。この知識を活かして、より効率的なコードを書きましょう。
コメント