补充内容:封装

私有化封装 private
受保护的封装 protected
公共的封装 public

注意:python目前不支持设定受保护的成员,但是开发者由约定的使用方式

受保护的封装:在成员名称前面加一个下划线
受保护的目的:仅允许成员在当前类/对象或者子类/子对象中访问,外部禁止

-----------------------------------------------------------------------------------------------------
                   类/对象内      子类/子对象中     类/对象外
私有化         √                        ×                           ×

受保护         √                        √                           √(实际上不允许)

公共的         √                        √                           √

实例

 #父类
class LiuBei:
#属性
__wife = ('甘夫人','糜夫人','孙尚香')#私有化
_money = ''#受保护(不是语法是约定)
skin = '黄色'# 公共
#方法
#吃饭
def eat(self):#公共的
print('打死我***也不吃~ 真香啊~')
#学习
def __study(self):#私有化
print('好好学习天天向上')
#做鞋
def _makeshoes(self):
print('编草鞋')
#内部测试受保护成员
def test(self):
print(self._money)
self._makeshoes()
#子类
class LiuShan(LiuBei):
pass #检测私有化和公共的封装
#实例化对象
ls = LiuShan()
#print(ls.wife) #私有成员无法在子类.子对象中调用
#ls.study()#私有成员无法在子类.子对象中调用
#输出结果:AttributeError: 'LiuShan' object has no attribute 'wife' print(ls.skin)#公共的成员可以在子类/子对象中调用
#输出结果:黄色
ls.eat()#公共的成员可以在子类/子对象中调用
#输出结果:打死我***也不吃~ 真香啊~ #调用受保护的成员
#实例化刘备的对象
lb = LiuBei() #在类和对向外(随便访问)
print(lb._money)
#输出结果:100
lb._makeshoes()
#输出结果:编草鞋 #在类和对象的内部(随便访问)
lb.test()
'''
输出结果:
100
编草鞋
''' #约定受保护的封装,不要这样去访问
#在子类和子对象中
print(ls._money)
#输出结果:100
ls._makeshoes()
#输出结果:编草鞋
05-11 17:43