[解決済み] 属性をプライベートにして、読み取り専用にするのはどんなとき?[クローズド]
質問
どのような場合に属性を非公開にするのか、また、属性に
property
.
最近読んだのですが、セッターとゲッターはpythonicではないのですが、使用するのは
property
デコレータを使うのはOKです。
しかし、クラスの外から設定することはできないが、読むことはできる属性(読み取り専用属性)がある場合はどうでしょうか。この属性はプライベートであるべきで、プライベートというのはアンダースコアを使ったもので、次のようなものです。
self._x
?
もしそうなら、ゲッターを使わずにそれを読むにはどうしたらいいのでしょうか?
私が今知っている唯一の方法は、次のように記述することです。
@property
def x(self):
return self._x
で属性を読み取ることができます。
obj.x
で読み取ることができますが、設定することはできません。
obj.x = 1
になっているので大丈夫です。
しかし、設定してはいけないオブジェクトを設定することに、本当に気を使うべきでしょうか?そのままにしておいたほうがいいのかもしれません。でも、アンダースコアは使えない。
obj._x
を読むのはユーザーにとって奇妙なことだから、アンダースコアを使うべきだろう。
obj.x
を使うべきであり、また、ユーザーはこの属性を設定してはいけないことを知らないのです。
あなたの意見と実践をお聞かせください。
どのように解決するのですか?
一般的に、Pythonのプログラムは、すべてのユーザーが同意した大人であり、したがって、自分自身で物事を正しく使用する責任があるという前提で書かれるべきです。 しかし、稀に属性が設定可能であることが意味をなさない場合 (派生値や静的なデータソースから読み取られた値など)、ゲッターのみのプロパティが一般的に好ましいパターンです。
関連
-
[解決済み] Javaにおけるpublic、protected、package-private、privateの違いは何ですか?
-
[解決済み] Pythonでシングルトンを作成する
-
[解決済み] フィールドとプロパティの違いは何ですか?
-
[解決済み] テキストファイルを文字列変数に読み込んで、改行を除去するには?
-
[解決済み] XMLを解析して、特定のノード属性のインスタンスをカウントするには?
-
[解決済み] パブリック、プライベート、プロテクトの違いは何ですか?
-
[解決済み] を付けるべきでしょうか?(shebang)を付けるべきか、またどのような形で付けるべきか?
-
[解決済み] プロパティとゲッターとセッターの使い分け
-
[解決済み] Python 2.7サポート終了?
-
[解決済み] Python の sorted() はどのようなアルゴリズムを使っているのですか?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Pythonのクラスはなぜオブジェクトを継承するのですか?
-
[解決済み] DataFrameの文字列、dtypeがobjectの場合
-
[解決済み] Pythonの構文に新しいステートメントを追加することはできますか?
-
[解決済み] Flaskで1時間ごとに関数を実行するようにスケジュールするには?
-
[解決済み] 文字列のリストを内容に基づいてフィルタリングする
-
[解決済み] スペースがないテキストを単語のリストに分割する方法
-
[解決済み] SQLAlchemy - テーブルのリストを取得する
-
[解決済み] matplotlib でプロットの軸、目盛、ラベルの色を変更する方法
-
[解決済み] Python Empty Generator 関数
-
[解決済み] Alembicアップグレードスクリプトでインサートやアップデートを実行するにはどうすればよいですか?