1

私はこの投稿を読んでいましたが、クリアされていないものはほとんどありません

https://stackoverflow.com/a/14787522/1890488

彼はこのコードを使用します

class O4(O3):
    @property # this decorator makes this instancevar into a data descriptor
    def var(self):
        return "Data descriptors (such as properties) are high priority"

    @var.setter # I'll let O3's constructor set a value in __dict__
    def var(self, value):
        self.__dict__["var"]  = value # but I know it will be ignored

@property はインスタンス変数をデータ記述子に変換すると彼は言います。

  1. を自動的に定義し、__get__その変数に対して__set____del__

または @property は以下とのみ同等です__get__

私はそれを取得していません

  1. インスタンス変数をデータ記述子に変換するデコレータは他にありますか

  2. @var.setter の機能は何ですか。それもデータ記述子部分ですか

4

2 に答える 2

1

@propertyはビルトインを呼び出します。そのproperty()詳細については、ドキュメントを参照してください。

property必須パラメータは 1 つだけで、左端の「ゲッター」です。その他はsetterdeleterです。

プレフィックス付きのデコレーターの使用は、@構文糖衣にすぎません。propertyより従来の (非 Pythonic の場合) 方法で呼び出すことができる場合は、次のようにします。

def var_get(self):
    return "Data descriptors (such as properties) are high priority"

def var_set(self, value):
    self.__dict__["var"]  = value 

var = property(var_get, var_set)
于 2013-02-11T09:05:01.650 に答える
0

システムのプロパティ デコレータのコードを見ると、次の 3 つの引数を取ることがわかります。

  • fget: 変数の取得を行う関数。
  • fset: 変数の設定を行う関数。
  • fdel: 変数を削除する関数。

通常、単一の関数をデコレータでデコレートするので、通常は getter を定義するだけです:

@property
def my_var(self):
    return self._my_var

セッターも宣言したい場合は、次の方法で、新しい「プロパティ」を使用してセッターを含めることができます.setter

@my_var.setter
def my_var(self, value):
    self._my_var = value

この 2 つの組み合わせは、 を呼び出すことと同じmy_var = property(get_my_var, set_my_var)です。

于 2013-02-11T09:01:19.703 に答える