繁体   English   中英

对setter和getter感到困惑[重复]

[英]Confused about setters and getters [duplicate]

我是一个新的python程序员,最近我开始学习python中的@property和@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

setter和getter的用途是什么?感谢任何帮助,谢谢

Getters和Setters是有助于封装的简单方法。 它们不是特定于Python的,而是总体上面向对象的编程的。

它们也称为mutator / accessor方法。

他们有什么意思?

他们隐藏了实施细节

此类的用户不需要知道内部使用的属性名称即可跟踪Username 您只需告诉他们调用.getName()即可获取名称,仅此而已。

它们允许您添加验证检查

如果不使用set方法而让​​您随意更改该属性,则可能进行了错误的更改,例如将User实例的名称设置为'12'。

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

有时您可能想保留实例上发生的突变的历史记录。 使用setter允许您在实际更改属性值之前触发其他功能,例如,调用logNameChanges方法。

这些是我实际遇到的最重要的原因。 还有一个更详尽的清单在这里

当您想要在设置或获取值时执行一些操作时,例如验证值是否有效,记录访问或修改另一个值,setter和getter确实有用。

例如,如果您有一个Screen类,并且想要将宽高比保持为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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM