小编典典

使用 @property 与 getter 和 setter

all

这是一个纯 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 程序,你会使用哪种方法,为什么?


阅读 98

收藏
2022-03-02

共1个答案

小编典典

首选属性 。这就是他们的目的。

原因是所有属性在 Python
中都是公共的。以一个或两个下划线开头的名称只是一个警告,即给定的属性是一个实现细节,在未来的代码版本中可能不会保持不变。它不会阻止您实际获取或设置该属性。因此,标准属性访问是访问属性的正常的
Pythonic 方式。

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

2022-03-02