次のコードに示すように、クラスの __call__ を使用してデコレーターを実装します。 リーリー
このクラスを関数を装飾するデコレータとして使用する場合。リーリー
ここで問題が発生します。 Django またはその他の Python プロセスを開始します。この param_check ルートを実行すると、print "1111111111" は初回のみ出力され、その後呼び出された場合には 1111111111111 は出力されません。そして、毎回「2222222222」と印刷されます。私の理解では、__call__ はこのデコレーターを初めて定義しているため、一度だけ実行され、後で再度要求されたときに定義されており、関数本体部分 (print 222222222 部分) のみが実行されます。この Python デコレーターの機能を誰が知っていますか?
迷茫2017-06-28 09:26:02
実は、クラス デコレータを使用するときに注意すべき点があります。パラメータ付きのクラス デコレータとパラメータなしのクラス デコレータは実際には異なります。
パラメータのないクラスデコレータリーリー リーリー
装飾フェーズでは __init__ 関数が実行され、装飾されたメソッドが呼び出されるときに __call__ が実行されることに注意してください。
パラメータを備えたクラスデコレーターリーリー
__call__ は装飾フェーズ中に 1 回だけ呼び出されることは明らかですさらに詳しく知りたい場合は、こちらをご覧ください: http://www.artima.com/weblogs...