对制定者和吸气者感到困惑

时间:2018-03-07 01:03:09

标签: python properties setter getter

我是一个新的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的用途是什么?,任何帮助表示赞赏 感谢

2 个答案:

答案 0 :(得分:3)

Getters和Setter只是帮助encapsulation的方法。它们并非特定于Python,而是一般的面向对象编程;

它们也称为mutator/accessor方法。

他们的观点是什么?

他们隐藏了实施细节

您班级的用户无需知道您在内部使用的媒体资源名称,即可跟踪name的{​​{1}}。您只需告诉他们致电User获取姓名即可。

它们允许您添加验证检查

如果您没有使用.getName()方法对该属性进行任意更改,则可能会进行错误更改,例如将set实例的名称设置为' 12&# 39;

您可以在实际改变属性

之前执行其他工作

有时您可能希望保留发生突变的历史记录 你的实例。使用setter可以在实际更改属性值之前触发其他函数,例如调用User方法。

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

答案 1 :(得分:0)

当您想要在设置或获取值时执行某些操作(例如验证值有效,或记录访问权限或修改其他值)时,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