この表記法は、従来の getter+setter と比べてどのような利点が@property
ありますか? プログラマーは、具体的にどのようなケースや状況で、どちらか一方を使用するように選択すべきでしょうか?
プロパティ:
class MyClass(object):
@property
def my_attr(self):
return self._my_attr
@my_attr.setter
def my_attr(self, value):
self._my_attr = value
プロパティなし:
class MyClass(object):
def get_my_attr(self):
return self._my_attr
def set_my_attr(self, value):
self._my_attr = value
ベストアンサー1
プロパティを優先してください。それがプロパティの存在意義です。
その理由は、Python ではすべての属性がパブリックであるためです。名前の先頭に 1 つまたは 2 つのアンダースコアを付けるのは、その属性が実装の詳細であり、将来のバージョンのコードでは同じままにならない可能性があるという警告にすぎません。実際にその属性を取得または設定できないわけではありません。したがって、標準の属性アクセスは、属性にアクセスするための通常の Python の方法です。
プロパティの利点は、構文的に属性アクセスと同一であるため、クライアント コードを変更することなく、プロパティを別のプロパティに変更できることです。プロパティを使用するコードを変更することなく、プロパティを使用するクラス バージョン (コード バイ コントラクトまたはデバッグ用など) と、実稼働用にプロパティを使用しないクラス バージョンを用意することもできます。同時に、後でアクセスをより適切に制御する必要がある場合に備えて、すべてに対してゲッターとセッターを記述する必要はありません。