デコレータ @wraps

@wrapsデコレータは、Pythonのfunctoolsモジュールから提供されており、他のデコレータと組み合わせて使用することで、デコレートされた関数の振る舞いを保持しながら、関数のメタデータ(関数名、ドキュメンテーション文字列など)を保護および維持するためのデコレータです。これは関数やメソッドをラップするデコレータがメタデータを失わないようにする際に非常に便利です。

以下に、@wrapsデコレータの使用方法を示す例を示します:

python
from functools import wraps # @wrapsデコレータを使用して関数のメタデータを保持 def my_decorator(func): @wraps(func) def wrapper(*args, **kwargs): """これはラッパー関数のドキュメンテーション文字列です.""" print("ラッパー関数が実行されました.") result = func(*args, **kwargs) return result return wrapper @my_decorator def my_function(): """これは関数のドキュメンテーション文字列です.""" print("my_functionが実行されました.") # メタデータを保持したまま関数を呼び出す print(my_function.__name__) # "my_function" print(my_function.__doc__) # "これは関数のドキュメンテーション文字列です."

この例では、my_decoratorデコレータ内で@wraps(func)が使用されています。これにより、wrapper関数がfuncと同じ名前、ドキュメンテーション文字列、その他の関数メタデータを保持します。

my_functionを呼び出すと、my_decoratorによってラップされ、メタデータが保持されたままの関数として実行されます。このようにして、関数の情報が維持され、デバッグやドキュメンテーションの作成などの目的で役立ちます。