‘’’
面向对象的三大特征:(封装,继承,多态)
封装特征:在实际工作中很多的成员不方便为对象之外的访问或者操作,所以需要限定一下
是否可以操作成员。
封装特性就是对成员操作进行限制的保护性措施
面向对象的封装分为三个级别:
1. 私有化封装 private
2. 受保护级别的封装(继承章节讲解) protected
3. 公共的封装 public
对象/类成员的访问:
1. 当前类/对象内部访问(在类的结构内部)
2. 类和对象的外部访问 (在类的结构外部)
3. 类和对象的子类和子对象的访问(在类的结构外部,在子类/对象的内部)
私有化封装:
方法:在成员属性或者方法名称之前,添加双下划线,就可以私有化成员。
特征:私有化的成员属性或者方法,无法在类和对象的外部访问
私有化成员仅允许在类和对象的内部进行访问
公共的封装:
方法:任何成员在没有进行私有化操作的时候默认都是公共封装。
特征:公共的封装成员属性和方法,在任何位置都可以被访问
Python封装的迷幻:
其实Python没有实现和其它语言一样的面向对象封装的策略(还不是很完备)
私有化封装采用了name mangling(改名)的策略实现的私有化操作(并不是真正的私有化)
改名策略:将原有成员属性或者方法名 修改为_类名__成员名
‘’’
#私有化封装例子:
#声明一个小明的类:
class XiaoMing:
#成员属性
name = ‘小明’ # 允许别人使用
__sex = ‘男人’ # 不允许别人访问
age = ‘18’ # 允许别人使用
__heart = ‘黑色的心’ # 不允许别人访问
__kidney = ‘严重透支了肾’ # 不允许别人访问
#成员方法
def talk(self): # 允许别人使用
print(‘我会唱很难听的歌’)
def sing(self): # 允许别人使用
print('我喜欢吃隆江猪脚饭')
def __wash(self): # 不允许别人使用
print('还不爱做运动')
def aa(self): # 在类或者对象的内部访问私有化的成员
print('我的名字叫:'+ self.name)
print('我是一个' + self.__sex)
self.sing()
self.talk()
self.__wash()
print('我今年才18岁,可是我已经开始衰老,因为:'+ self.__kidney)
print('由于每次吃饭不请老大吃肉,我的心已经变成了:'+self.__heart)
#正常途径访问私有化对象的成员属性和方法:
bb = XiaoMing()
bb.aa()
#破解访问私有化对象的成员属性和方法:
cc = XiaoMing()
print(cc._XiaoMing__kidney) #访问类中的私有化成员
cc._XiaoMing__wash() #访问了对象中的私有化成员
#注意:self过的成员无法访问