补充内容:封装

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

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。


注意: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 #输出结果:编草鞋

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄