1. ホーム
  2. python

[解決済み] 属性をプライベートにして、読み取り専用にするのはどんなとき?[クローズド]

2022-09-13 06:29:17

質問

どのような場合に属性を非公開にするのか、また、属性に property .

最近読んだのですが、セッターとゲッターはpythonicではないのですが、使用するのは property デコレータを使うのはOKです。

しかし、クラスの外から設定することはできないが、読むことはできる属性(読み取り専用属性)がある場合はどうでしょうか。この属性はプライベートであるべきで、プライベートというのはアンダースコアを使ったもので、次のようなものです。 self._x ? もしそうなら、ゲッターを使わずにそれを読むにはどうしたらいいのでしょうか? 私が今知っている唯一の方法は、次のように記述することです。

@property
def x(self):
    return self._x

で属性を読み取ることができます。 obj.x で読み取ることができますが、設定することはできません。 obj.x = 1 になっているので大丈夫です。

しかし、設定してはいけないオブジェクトを設定することに、本当に気を使うべきでしょうか?そのままにしておいたほうがいいのかもしれません。でも、アンダースコアは使えない。 obj._x を読むのはユーザーにとって奇妙なことだから、アンダースコアを使うべきだろう。 obj.x を使うべきであり、また、ユーザーはこの属性を設定してはいけないことを知らないのです。

あなたの意見と実践をお聞かせください。

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

一般的に、Pythonのプログラムは、すべてのユーザーが同意した大人であり、したがって、自分自身で物事を正しく使用する責任があるという前提で書かれるべきです。 しかし、稀に属性が設定可能であることが意味をなさない場合 (派生値や静的なデータソースから読み取られた値など)、ゲッターのみのプロパティが一般的に好ましいパターンです。