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で実現できます。