对 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 的用户不需要知道您在内部使用的 属性 名称来跟踪您的 User
的 name
。你只要告诉他们打电话给 .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
我是一名新的 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 的用户不需要知道您在内部使用的 属性 名称来跟踪您的 User
的 name
。你只要告诉他们打电话给 .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