[英]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方法。
此类的用户不需要知道内部使用的属性名称即可跟踪User
的name
。 您只需告诉他们调用.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.