装飾関数とメソッド
まず 2 つの単純な数学関数を定義します。1 つは二乗和を計算する関数、もう 1 つは二乗の差を計算する関数です。
リーリーリーリー
ここで、デコレーターを使用して上記の変更を実装します。
リーリー
デコレータを定義した後、@ 構文を通じてそれを使用できます。関数 square_sum および square_diff が定義される前に @decorator を呼び出すことにより、実際には square_sum または square_diff をデコレーターに渡し、デコレーターによって返された新しい呼び出し可能オブジェクトを元の関数名 (square_sum または square_diff) に割り当てます。 したがって、 square_sum(3, 4) を呼び出すと、次と同等になります:
リーリー
関数の処理と同様に、デコレータを使用してクラスメソッドを処理できます。
他にも同様の関数がある場合は、関数を繰り返し変更したり、新しいパッケージを追加したりすることなく、引き続きデコレーターを呼び出して関数を変更できます。これにより、プログラムの再利用性が向上し、可読性が向上します。
高麗人参のデコレーション
@decorator などの上記のデコレーター呼び出しでは、デコレーターはデフォルトで唯一のパラメーターとして後続の関数になります。デコレータの構文を使用すると、デコレータを呼び出すときに @decorator(a) などの他のパラメータを指定できます。これにより、デコレータの作成と使用における柔軟性が向上します。リーリー
リーリー
デコレーション
上記の例では、デコレータは関数を受け取り、関数を返すため、関数を処理する効果があります。 Python 2.6 以降、デコレータはクラスに拡張されました。デコレータはクラスを受け取ってクラスを返すことができるため、クラスを処理する効果があります。リーリー
変更を加えると、Bird クラスはディスプレイが呼び出された回数を表示できるようになります。