8

簡単な質問ですが、プロパティを使用する場所と、古い属性を使用する場所を理解するのが少し難しいです。私にとっての区別は少しぼやけています。このテーマに関するリソースはどれも素晴らしいでしょう、ありがとう!

4

4 に答える 4

17

プロパティは、属性を設定、取得、または削除するときに何が起こるかを説明する関数を定義できるため、属性よりも柔軟性があります。この追加の柔軟性が必要ない場合は、属性を使用してください。属性は宣言が簡単で高速です。

Javaのような言語では、将来、これらの関数をより複雑なバージョンに置き換えるオプションを利用できるように、通常は常にゲッターとセッターを作成することをお勧めします。Pythonでは、属性とプロパティにアクセスするためのクライアントコード構文が同じであるため、これは必要ありません。したがって、後方互換性を損なうことなく、後でいつでもプロパティを使用することを選択できます。

于 2012-06-10T10:10:10.433 に答える
14

重要なのは、構文が交換可能であるということです。常に属性から始めます。属性にアクセスするときに追加の計算が必要な場合は、それをプロパティに置き換えます。

于 2012-06-10T10:11:24.067 に答える
1

プロパティは、属性+事後カプセル化です。

属性をプロパティに変換するときは、属性に「アタッチ」するゲッターセッターを定義するだけで、データアクセスがフックされます。そうすれば、残りのコードを書き直す必要はありません。属性プロパティであるかどうかに関係なく、データにアクセスする方法は同じです。

この非常に巧妙で強力なカプセル化メカニズムのおかげで、Pythonでは、データにアクセスするときに特別なことをする必要がない限り、通常は属性を使用できます(事前のカプセル化なしで、ゲッターセッターなしで)。

その場合、必要な場合にのみ、セッターゲッターを定義し、それらを属性に「アタッチ」して、残りのコードに影響を与えることなく、プロパティに変換できます(Javaでは、通常、最初に行うことです)。フィールド(通常はプライベート)を作成するときに行うのは、関連付けられたゲッターおよびセッターメソッドを作成することです)。

属性、プロパティ、記述子についての素敵なページはこちら

于 2012-06-10T12:55:22.393 に答える
0

Daniel Rosemanが言ったことに加えて、何かをラップするとき、つまり自分で情報を保存しないが、ラップされたオブジェクトは保存するときに、プロパティを使用することがよくあります。次に、プロパティは優れたアクセサになります。

于 2012-06-10T11:38:41.130 に答える