我正在尝试理解类中getter / setter方法的用法。假设我们有一个名为A的类,其中包含一些 public 实例变量,后跟一个带参数的构造函数,其中参数从另一个类(main)传递给它。在构造函数中,我们让那些实例变量等于传递的内容。
现在如果这个类被另一个程序员使用,没有什么能阻止他们直接访问/更改实例变量到无效的东西。通过将实例变量设为私有,我们可以消除对这些变量的访问。但是,如果我们想要间接地或在某些特定条件下更新/更改这些实例变量,或者只是让该人可以访问实例变量,我们将为此创建一个getter / setter对。
好处?:
1.仅在set()方法下的某些有效原因下更改实例变量
2.因此,我们可以显示实例变量的实际内容,而不会让正在使用此类的程序员更改它。
这是正确的解释吗?
答案 0 :(得分:7)
封装 - 指将所有相关成员(变量和方法)保存在一个对象中。指定 作为私有的成员变量可以隐藏变量和方法。物体应该隐藏它们的内部运作 外面的观点。 良好的封装可以防止对象相互交互,从而提高代码模块性 一种意想不到的方式,这反过来又使未来的开发和重构工作变得容易。
能够封装类的成员对于安全性和完整性非常重要。我们可以保护变量
不可接受的价值观。上面的示例代码描述了如何使用封装来保护 MyMarks 对象
从负值。对成员变量 vmarks 的任何修改只能通过setter执行
方法setMarks(int mark)
。这可以防止对象 MyMarks 通过抛出一个负值
异常。
答案 1 :(得分:1)
您的解释是正确的。另外(在我的头顶):
答案 2 :(得分:0)
是的,您的解释是正确的。 但这是因为语言的限制。例如,在python中,您不需要每次都使用getter或setter进行编写,因为您可以覆盖成员变量的行为。例如:
class MyClass:
def __init__(self, myproperty):
self.myproperty = myproperty
如果每个人都像以下那样使用它:
print(new MyClass("test").myproperty)
你仍然可以改变你吸气的行为:
class MyClass:
def __init__(self, myproperty):
self._myproperty = myproperty
@property
def myproperty(self):
return self._myproperty + " changed behavior"
甚至是没有触摸代码的setter你上课的用途:
@myproperty.setter
def myproperty(self, myproperty):
if len(myporperty) > 0:
self._myproperty = myproperty
有关更好的示例,请参阅property参考。
答案 3 :(得分:0)
如果实例变量仅由其类中使用定义的方法使用,则应将其设为私有;如果实例变量必须在特定范围内,则应为私有且仅可通过访问器使用methods [getter以及Setter]方法。