Tips
開発Tips(2025-12-03)
Pythonのデコレータを活用することで、関数やメソッドの機能を変更せずに、共通の処理(ロギング、認証、キャッシュなど)を追加できます。コードの再利用性を高め、DRY原則(Don't Repeat Yourself)を促進します。
Python
Pythonのデコレータを活用することで、関数やメソッドの機能を変更せずに、共通の処理(ロギング、認証、キャッシュなど)を追加できます。コードの再利用性を高め、DRY原則(Don’t Repeat Yourself)を促進します。
デコレータによる関数拡張
-
説明: デコレータは、既存の関数やメソッドをラップし、その前後または周囲にコードを追加する機能です。これにより、関数のコアロジックを変更せずに、共通の処理をモジュール化できます。
-
コード例:
import functools def log_execution(func): @functools.wraps(func) def wrapper(*args, **kwargs): print(f"Executing: {func.__name__} with args: {args}, kwargs: {kwargs}") result = func(*args, **kwargs) print(f"Executed: {func.__name__} returned: {result}") return result return wrapper @log_execution def add(x, y): """Adds two numbers.""" return x + y result = add(5, 3) print(f"Result: {result}") -
注意点:
@functools.wrapsを使用して、元の関数のメタデータ(__name__、__doc__など)を保持することが推奨されます。- デコレータは関数定義時に適用されるため、実行時の動的な変更には適していません。
- 複数のデコレータを重ねて適用する場合、デコレータの適用順序が重要です。
-
おすすめポイント:
- ロギング、認証、権限チェック、キャッシュ処理など、さまざまな共通処理を簡潔に実装できます。
- コードの可読性と保守性を向上させ、DRY原則を促進します。
- AOP(Aspect-Oriented Programming)の概念をPythonで実現できます。