2024-07-05 10:12:20 发布
网友
class Whatever: #constructor def __init__(self,x): self.x=x
因此程序员可以像这样轻松地修改x的值:
w=Whatever(4) w.x=6
在这一点上,我想知道是否真的有必要使用如下setter方法:
setW(self,x) self.x=x
最后一个不是代码上的冗余吗?我看过一些Python书籍,它们努力做到这一点,但对我来说,这似乎毫无意义,有必要吗?你知道吗
OOP中的getter/setter主要是维护encapsulation concept,并对对象的内部变量进行访问控制、输入验证、触发等操作,这是OOP设计中的一个概念,适用于所有编程语言。你知道吗
你可以用任何编程语言定义公共成员变量,但是一个好的OOP设计不应该对外公开任何内部实现细节,一个类应该只公开所需的内容,并且应该严格控制对它的访问并验证输入。你知道吗
有关更多信息,请查看this Programmers Stack Exchange question,这里的信息通常适用于OOP。你知道吗
Python允许将任意成员添加到类中,因此set方法提供了一个额外的检查,以使拼写错误更加明显:
class Whatever: def __init__(self,v): self.some_value = v def setSomeValue(v): self.some_value = v w=Whatever(4) w.some_valu = 6 # No error! w.setSomeValu(6) # Error
一个原因自动浮现在我的脑海中:输入验证。你知道吗
如果Whatever.x应该是日期,但被设置为整数,会发生什么情况?有些类设计需要这种验证,这是一种完美的方法:
Whatever.x
class Whatever: #constructor def __init__(self): self._x=None @property def x(self): """I'm the 'x' property.""" return self._x @x.setter def x(self, value): if isinstance(value, datetime): #silly example self._x = value else: raise ValueError('Was expecting a date')
也就是说,对于每一个类数据都有getter和setter并不被认为是非常pythonic的。一些不需要这种保护的变量可以通过实例接口正常访问。你知道吗
OOP中的getter/setter主要是维护encapsulation concept,并对对象的内部变量进行访问控制、输入验证、触发等操作,这是OOP设计中的一个概念,适用于所有编程语言。你知道吗
你可以用任何编程语言定义公共成员变量,但是一个好的OOP设计不应该对外公开任何内部实现细节,一个类应该只公开所需的内容,并且应该严格控制对它的访问并验证输入。你知道吗
有关更多信息,请查看this Programmers Stack Exchange question,这里的信息通常适用于OOP。你知道吗
Python允许将任意成员添加到类中,因此set方法提供了一个额外的检查,以使拼写错误更加明显:
一个原因自动浮现在我的脑海中:输入验证。你知道吗
如果
Whatever.x
应该是日期,但被设置为整数,会发生什么情况?有些类设计需要这种验证,这是一种完美的方法:也就是说,对于每一个类数据都有getter和setter并不被认为是非常pythonic的。一些不需要这种保护的变量可以通过实例接口正常访问。你知道吗
相关问题 更多 >
编程相关推荐