Pythonでデコレータ関数を理解しよう:基本から応用まで

この記事では、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のデコレータ関数は、関数の振る舞いを独自に制御するための強力なツールです。基本形から応用例まで、多くの用途で利用されています。この知識を活かして、より効率的なコードを書きましょう。

コメント

コメントする

目次