补充内容:封装
私有化封装 private
受保护的封装 protected
公共的封装 public
注意:python目前不支持设定受保护的成员,但是开发者由约定的使用方式
受保护的封装:在成员名称前面加一个下划线
受保护的目的:仅允许成员在当前类/对象或者子类/子对象中访问,外部禁止
-----------------------------------------------------------------------------------------------------
类/对象内 子类/子对象中 类/对象外
私有化 √ × ×
受保护 √ √ √(实际上不允许)
公共的 √ √ √
实例
1 #父类 2 class LiuBei: 3 #属性 4 __wife = ('甘夫人','糜夫人','孙尚香')#私有化 5 _money = '100'#受保护(不是语法是约定) 6 skin = '黄色'# 公共 7 #方法 8 #吃饭 9 def eat(self):#公共的 10 print('打死我***也不吃~ 真香啊~') 11 #学习 12 def __study(self):#私有化 13 print('好好学习天天向上') 14 #做鞋 15 def _makeshoes(self): 16 print('编草鞋') 17 #内部测试受保护成员 18 def test(self): 19 print(self._money) 20 self._makeshoes() 21 #子类 22 class LiuShan(LiuBei): 23 pass 24 25 #检测私有化和公共的封装 26 #实例化对象 27 ls = LiuShan() 28 #print(ls.wife) #私有成员无法在子类.子对象中调用 29 #ls.study()#私有成员无法在子类.子对象中调用 30 #输出结果:AttributeError: 'LiuShan' object has no attribute 'wife' 31 32 print(ls.skin)#公共的成员可以在子类/子对象中调用 33 #输出结果:黄色 34 ls.eat()#公共的成员可以在子类/子对象中调用 35 #输出结果:打死我***也不吃~ 真香啊~ 36 37 #调用受保护的成员 38 #实例化刘备的对象 39 lb = LiuBei() 40 41 #在类和对向外(随便访问) 42 print(lb._money) 43 #输出结果:100 44 lb._makeshoes() 45 #输出结果:编草鞋 46 47 #在类和对象的内部(随便访问) 48 lb.test() 49 ''' 50 输出结果: 51 100 52 编草鞋 53 ''' 54 55 #约定受保护的封装,不要这样去访问 56 #在子类和子对象中 57 print(ls._money) 58 #输出结果:100 59 ls._makeshoes() 60 #输出结果:编草鞋