其他答案已经说您在 Python 中永远不需要 getter,这只是风格问题。
但这里的关键是有一种 Pythonic 风格,不必要的 getter 与这种风格背道而驰。当有经验的 Python 开发人员阅读您的代码时,使用不必要的 getter 会引发危险信号。(这里需要多少秒才能得到三个评论说“有人使用 Java 太多了”的变体?)
如果您阅读 PEP 8 样式指南,在Designing for继承下,它说:
对于简单的公共数据属性,最好只公开属性名称,而不需要复杂的访问器/修改器方法。请记住,如果您发现简单的数据属性需要增加功能行为,Python 提供了一条通往未来增强的简单途径。在这种情况下,使用属性将功能实现隐藏在简单的数据属性访问语法后面。
PEP 8 仅用作标准库的样式指南,但它仍然被普遍认为是对 Python 惯用的外观的良好描述(“TOOWTDI”意味着任何描述性指南都隐含地是规范性指南,至少在理论上),并且有不错的测试人员和修复程序,可让您根据 PEP 8 指南测试自己的代码。
当我在这里时,William 的答案与为什么使用 getters 和 setters相关联,这是一个与语言无关的问题,其中接受的答案是访问器有时是个好主意的原因列表。它们几乎都与 Python 无关。大多数可以用一个词来回答:(@property
或者,在最后一种情况下,attrgetter
)。对于其余的:
- 控制生命周期和内存管理…… Python 已经管理了内存。
- 提供调试截取点...解释型语言可以在调试时轻松放置观察点。
- 改进了与库的互操作性…… Python 的
mock
、pickle
等旨在使用属性进行操作。
- 允许继承者更改属性行为方式的语义,并通过覆盖 getter/setter 方法来公开。这仅与具有静态类型的语言相关,但虚函数除外,例如 C++ 或 Java。