对 setter 和 getter 感到困惑

Confused about setters and getters

我是一名新的 python 程序员,我最近开始学习 @属性 和 python 中的 @setter 装饰器。但是我对它们在最简单的脚本中的使用感到困惑,例如:

class Aaron:
    def __init__(self,name):
       self.name = name
    @property
    def name(self):
       return self._name
    @name.setter
    def name(self,new):
        self._name = new

setters 和 getter 有什么用?欢迎提供帮助 谢谢

Getter 和 Setter 只是辅助 encapsulation 的方法。它们并不特定于 Python,而是 Object-Oriented 通用编程;

它们也被称为 mutator/accessor 方法。

他们的观点是什么?

他们隐藏了实现细节

您的 class 的用户不需要知道您在内部使用的 属性 名称来跟踪您的 Username。你只要告诉他们打电话给 .getName() 就可以得到名字了。

它们允许您添加验证检查

如果 属性 暴露给你任意更改,而不使用 set 方法,你可能会做出错误的更改,例如将 User 实例的名称设置为'12'.

您可以在实际变异之前执行其他工作 属性

有时您可能想保留发生在 你的实例。使用 setter 允许您在实际更改 属性 值之前触发其他函数,例如调用 logNameChanges 方法。

这些是我实际遇到过的最重要的原因。有一个更详尽的列表 here.

Setters 和 getters 在你想要在设置或获取一个值时执行一些操作时非常有用,例如验证值是否有效,或者记录访问,或者修改另一个值。

例如,如果您有 Screen class 并且想要保持 16:9 的宽高比,您可以这样写:

class Screen:
    def __init__(self):
       self._height = 1080
       self._width = 1920

    @property
    def height(self):
       return self._height
    @name.setter
    def height(self,new):
        self._height = new
        self._width = 16*self._height/9

    @property
    def width(self):
       return self._width
    @name.setter
    def width(self,new):
        self._width = new
        self._height = 9*self._width/16