この投稿では、関数デコレーターの一般的な使用法、特にクラス プロパティ デコレーターと、デコレーターとクラス メソッドを直接使用する場合の違いについて説明します。
見覚えがありますね?
ユビキタスな @propery デコレーターはどこにでもありますが、実際にはどのように機能するのでしょうか?
@property を使用することと、property() クラス メソッドを直接使用することの違いは何ですか?
これは標準のデコレータ関数の例です。
Python の内部では、デコレータを呼び出す関数 (つまり、外側の関数) は、デコレータを呼び出して外側の関数をパラメータとして渡すことによって、追加のコードでラップされます。デコレーターは、すべての新しいロジックを含むラップされた関数を作成し、それを外部関数の値として返します。
クラス プロパティ メソッドは、クラス属性のゲッター、セッター、デリーター メソッドを定義し、それらをクラスのデフォルトのマジック メソッドにバインドできる組み込みの Python 関数です。
def get_my_value(self): return self._my_value my_value = property(get_my_value)
は Python コンパイラーによって
として理解されます
def __get__(self,obj): return self.fget(obj)
基本的に、property() メソッドは、属性名と基礎となるデータの間のプロキシとして機能するオブジェクトを作成します。したがって、デフォルトのマジック メソッドでは不可能なカスタム動作や検証ロジックを追加できるようになります。
上で見たように、プロパティ メソッドを使用すると、デフォルトのマジック メソッドを上書きし、その機能を拡張できます。また、デコレーターが新しい関数内で関数ロジックをラップする方法も示しました。 @property デコレーターを使用してゲッター、セッター、またはデリーター メソッドが呼び出される場合、Python はそれを内部で property() メソッドの呼び出しに変換し、メソッドをデフォルトのマジック メソッドを上書きできる関数にラップするプロパティ オブジェクトを作成します。
@property デコレータまたは property() メソッドの使用が同等であることを示しましたが、デコレータの方が簡単に使用でき、クラス内のコードが読みやすくなります。したがって、これはベスト プラクティスおよびコーディング規約とみなされ、特定のシナリオ要件がない限り、デコレーターを使用する必要があります。
https://www.geeksforgeeks.org/python-property-decorator-property/
ブログ投稿のヘッダー画像ジェネレーター
コードスニペットメーカー
以上がPython のデコレータとクラス プロパティの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。