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