1. ホーム
  2. python

[解決済み] プロパティとゲッターとセッターの使い分け

2022-03-18 17:15:49

質問

Pythonに特化した設計に関する質問です。

class MyClass(object):
    ...
    def get_my_attr(self):
        ...

    def set_my_attr(self, value):
        ...

そして

class MyClass(object):
    ...        
    @property
    def my_attr(self):
        ...

    @my_attr.setter
    def my_attr(self, value):
        ...

Pythonはどちらの方法でもできるんです。もしあなたがPythonのプログラムを設計するとしたら、どちらの方法を使いますか?そしてその理由は?

どのように解決するのですか?

プロパティを優先する . そのためにあるのだから。

Pythonではすべての属性が公開されているからです。アンダースコアで名前を始めることは、与えられた属性が実装の詳細であり、将来のバージョンのコードで同じであるとは限らないという警告に過ぎません。これは、実際にその属性を取得したり設定したりすることを妨げるものではありません。したがって、標準的な属性アクセスは、通常の、Pythonicな、属性にアクセスする方法です。

プロパティの利点は、属性アクセスと構文的に同じであるため、クライアントコードに変更を加えることなく、一方から他方へ変更することができる点です。例えば、あるクラスでプロパティを使用するバージョン(code-by-contract やデバッグ用)と使用しないバージョンを、それを使用するコードを変更することなく、本番用に用意することも可能です。同時に、後でアクセス制御が必要になったときのために、すべてのものにゲッターとセッターを記述しておく必要もありません。