重畳デコレータ
定義:オブジェクトは、同じように飾られ、複数のデコレータを追加し、実行します。
デコレーター装飾オーバーレイ実行順序の順
装飾によってアップ:装飾オーダー。
実行順序:トップダウンで実行。
注:デコレータは、装飾品を呼び出すときに実行する機能を追加します。
デフWRAPPER1(FUNC): デフ inner1(* argsを、** kwargsから): 印刷(' 1 ' ) RES = FUNC(* argsを、** kwargsから) 印刷(' 2 ' ) の戻りresが 戻りますinner1 DEF :wrapper2(FUNC) デフ inner2(* argsを、** kwargsから): 印刷(' 3 ' ) RES = FUNC(* argsを、** kwargsから) 印刷(' 4 ' ) の戻りresが 戻りますinner2 DEF :wrapper3(FUNC) デフ inner3(* argsを、** kwargsから): 印刷(' 5 ' ) RES = FUNC(* argsを、** kwargsから) 印刷(' 6 ' ) の戻りresが 戻りますinner3を @ WRAPPER1 #inner1 = WRAPPER1(inner2) @ wrapper2 #inner2 = wrapper2(inner3) @ wrapper3 #inner3 = wrapper3(FOO) DEF のfoo(): 印刷(' FOOから' ) FOO()
第二には、参照デコレータがあります
DEF (ユーザー)warpper: DEF外(FUNC): #FUNC = fooの DEFインナー(* argsを、** kwargsから): IFユーザー== ' F ' : 印刷(' 購入(笑)のために利用できる') #ユーザの追加 RES = FUNC (* argsを、** kwargsから) #FUNC()= FOO() の戻りRESは elifのユーザー== ' K ' : 印刷(' 申し訳ありませんneinei ') #は、ユーザーを追加します RES = FUNC(* argsを、** kwargsから) #1 FUNC()= FOO() の戻りresが 返すインナー リターン外側を @wrapper(" K ") #外warpper =(FOO) DEFの fooが(): #飾られたオブジェクトは、 印刷(' FOOから' ) FOO()
三、ラップ修復ツール
#パケットのような非導電性 #DEF warpper(FUNC): # DEFインナー(* argsを、** kwargsから): # '' ' # これはデコレータのノートです # :PARAM引数: # :PARAM kwargsから: # :リターン: # '' ' # RES = FUNC(* argsを、** kwargsから) #の 復帰RES # リターンインナー #@wrapper #DEFのfoo(): # ' '' # このオブジェクトが装飾されているノート # :リターン: # '' ' #1 (「FOOから)印刷' #はFoo() #印刷(FOO)#<warpper機能。<地元の人々について> .inner AT 0x0000000009E352F0>この場合は注意、デコレータ #リーダーパケットの後 から functools インポートラップ DEFのwarpper(FUNC): @wraps(FUNC) #の変更ネームスペース--- foo>のFUNC DEFインナー(* argsを、** kwargsから): '' ' これはコメントですデコレータ :のparam引数: :のparam kwargsから: :リターン: ''」 RES = FUNC(* argsが、** kwargsから) 戻り解像度は 返すインナー @wrapper デフの foo():''」 これは、注釈付きの装飾品であります :リターン: ''」 プリント(' FOOから' ) #1 のfoo() プリント(FOO。__doc__)