複数デコレータの連鎖:高度な関数修飾
メニューを表示するにはスワイプしてください
Pythonにおける**デコレータの連結(Chaining decorators)**は、複数のデコレータを1つの関数に適用できる強力な機能。 各デコレータは関数を何らかの方法で修正または拡張し、特定の順序で適用される。 デコレータの連結を説明する実用的な例:
2つのシンプルなデコレータ
まず、2つのシンプルなデコレータを定義:
def decorator_one(func):
def wrapper():
print("Decorator one start")
func()
print("Decorator one end")
return wrapper
def decorator_two(func):
def wrapper():
print("Decorator two start")
func()
print("Decorator two end")
return wrapper
デコレータの連結
これらのデコレータを1つの関数に適用:
1234567891011121314151617181920def decorator_one(func): def wrapper(): print("Decorator one start") func() print("Decorator one end") return wrapper def decorator_two(func): def wrapper(): print("Decorator two start") func() print("Decorator two end") return wrapper @decorator_one @decorator_two def greet(): print("Hello!") greet()
各デコレータには、次のデコレータに進む前と、そのデコレータの処理が完了した後に実行されるコードが含まれています。これは階層的に動作します。デコレータは上から下の順に適用されます。 上位のデコレータの出力が、次の下位デコレータへの入力となります。この階層構造により、元の関数に複数の機能を追加できます。
実行順序
greet() を呼び出すと、実行順序は次のようになります:
decorator_oneから最初の print が実行される;decorator_one内で、decorator_twoから最初の print が実行される;- 最後に、元の
greet関数が実行される; - その後、戻って
decorator_twoのメッセージ出力を完了する; - 最後に
decorator_oneの print 文が実行されて全体が終了する。
出力は次のようになります:
Decorator one start
Decorator two start
Hello!
Decorator two end
Decorator one end
デコレータの連鎖 は、関数の動作をモジュール化し、可読性を保ちながら拡張する強力な方法です。
次のチャレンジでこのトピックへの理解がさらに深まることを願っています。
すべて明確でしたか?
フィードバックありがとうございます!
セクション 5. 章 5
AIに質問する
AIに質問する
何でも質問するか、提案された質問の1つを試してチャットを始めてください
セクション 5. 章 5