@property と getter および setter の使用 [重複] 質問する

@property と getter および setter の使用 [重複] 質問する

この表記法は、従来の 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 の方法です。

プロパティの利点は、構文的に属性アクセスと同一であるため、クライアント コードを変更することなく、プロパティを別のプロパティに変更できることです。プロパティを使用するコードを変更することなく、プロパティを使用するクラス バージョン (コード バイ コントラクトまたはデバッグ用など) と、実稼働用にプロパティを使用しないクラス バージョンを用意することもできます。同時に、後でアクセスをより適切に制御する必要がある場合に備えて、すべてに対してゲッターとセッターを記述する必要はありません。

おすすめ記事