Pythonのデコレーター(Decorator)とは?関数に機能を追加する便利な仕組み
デコレーター(Decorator)とは、Pythonで既存の関数やメソッドに、簡潔に新しい機能を追加するための仕組みです。
@
を使って関数の定義に「飾り(装飾)」をつけるイメージから、デコレーターと呼ばれています。
デコレーターの基本構文
def decorator(func):
def wrapper():
print("前処理")
func()
print("後処理")
return wrapper
@decorator
def hello():
print("こんにちは!")
hello()
この例では、hello()
を呼び出すと、decorator
によって前後に処理が追加された関数として動作します。
実行結果
前処理
こんにちは!
後処理
引数付き関数への対応
def decorator(func):
def wrapper(*args, **kwargs):
print("開始")
result = func(*args, **kwargs)
print("終了")
return result
return wrapper
@decorator
def add(a, b):
return a + b
print(add(3, 5)) # → 開始 → 終了 → 8
*args
と **kwargs
を使えば、任意の引数を持つ関数も装飾可能です。
デコレーターの活用例
- ログ出力(関数が呼ばれた記録)
- 実行時間の測定
- 認証やアクセス制限の制御
- 関数の共通処理の簡略化
標準ライブラリのデコレーター例
from functools import lru_cache
@lru_cache(maxsize=1000)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
この @lru_cache
は、関数の結果をキャッシュして高速化してくれるデコレーターです。
クラスメソッドや静的メソッドにも
class MyClass:
@staticmethod
def greet():
print("こんにちは(静的メソッド)")
@classmethod
def info(cls):
print("これはクラスメソッドです")
@staticmethod
や @classmethod
も実はPythonの組み込みデコレーターです。
まとめ
Pythonのデコレーターは、関数やメソッドに簡単に機能を追加できる強力な機能です。
コードの再利用性が高まり、保守性の高いプログラムを作るのに役立ちます。
まずはログ表示や前後処理など、簡単な例から試してみましょう。理解が深まると、Web開発やAPI制御など応用範囲も広がります!