这是一个纯 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 方式。
属性的优点是它们在语法上与属性访问相同,因此您可以在不更改客户端代码的情况下从一个更改为另一个。您甚至可以拥有一个使用属性的类的版本(例如,用于代码按合同或调试)和一个不用于生产的版本,而无需更改使用它的代码。同时,您不必为所有内容编写 getter 和 setter,以防万一您以后可能需要更好地控制访问。