他の回答では、Python ではゲッターは不要であり、それは単なるスタイルの問題であると既に述べています。
しかし、ここで重要なのは Python スタイルがあり、不必要な getter がそのスタイルに反することです。不必要な getter を使用すると、経験豊富な Python 開発者がコードを読むときに警告が表示されます。(ここで「誰かが Java を使いすぎた」というバリエーションを含む 3 つのコメントを取得するのに何秒かかりましたか?)
PEP 8 スタイル ガイドのDesigning for inheritanceを読むと、次のように書かれています。
単純なパブリック データ属性の場合は、複雑なアクセサー/ミューテーター メソッドを使用せずに、属性名のみを公開することをお勧めします。Python は、単純なデータ属性が機能的な動作を拡張する必要があることに気付いた場合に、将来の拡張への簡単な道筋を提供することに注意してください。その場合、プロパティを使用して、関数の実装を単純なデータ属性アクセス構文の背後に隠します。
PEP 8 は、stdlib のスタイル ガイドとしてのみ意図されていますが、一般的には、慣用的な Python がどのように見えるかを適切に説明していると考えられています (「TOOWTDI」は、少なくとも理論的には、説明的なガイドが暗黙のうちに規範的なガイドであることを意味します)。 PEP 8 ガイドラインに照らして独自のコードをテストできる優れたテスターとフィクサー。
私が取り組んでいる間、William の回答は、言語にとらわれない質問であるgetters と setters を使用する理由にリンクされています。受け入れられた回答は、アクセサが時々良いアイデアである理由のリストです。Python に関連するものはほとんどありません。ほとんどの場合、1 つの単語で答えることができます: @property
(または、最後の場合はattrgetter
)。残りは:
- ライフタイムとメモリ管理の制御… Python はメモリを管理しています。
- デバッグ インターセプト ポイントの提供…解釈された言語により、デバッグ中にウォッチポイントを簡単に配置できます。
- ライブラリとの相互運用性の向上… Python の
mock
、pickle
などは、属性を操作するように設計されています。
- 継承者がプロパティの動作のセマンティクスを変更し、getter/setter メソッドをオーバーライドして公開できるようにします。これは、C++ や Java などの仮想関数を除き、静的型付けを使用する言語にのみ関連します。