我正在阅读我们如何确保数据封装在Python。一个博客上说
数据封装意味着,我们只能通过getter和setter访问私有属性
请考虑blog中的以下片段:class Robot:
def __init__(self, name=None, build_year=None):
self.name = name
self.build_year = build_year
现在,如果我创建类的对象,如下所示:
^{pr2}$
目前,我可以直接访问属性,因为我已经将它们定义为public(不使用__符号)
现在为了确保数据封装,我需要将属性定义为private
使用__符号并通过getter和setter访问私有属性。在
所以新的类定义如下:class Robot:
def __init__(self, name=None, build_year=2000):
self.__name = name
self.__build_year = build_year
def set_name(self, name):
self.__name = name
def get_name(self):
return self.__name
def set_build_year(self, by):
self.__build_year = by
def get_build_year(self):
return self.__build_year
现在我将类实例化如下:x = Robot("Marvin", 1979)
x.set_build_year(1993)
这样,我就实现了数据封装,因为私有数据成员不再被直接访问,它们只能通过类方法访问。在
问题1:我们为什么要这样做?我们要保护代码不让谁知道?谁是外面的世界?任何拥有源代码的人都可以根据自己的需求对其进行调整,那么我们为什么还要添加额外的方法(get/set)来修改/调整属性呢?在
问题2:上面的例子是否被认为是data encapsulation?在