面向对象的三大特征--封装

封装,继承与多态


封装特征:
实际工作中很多的成员不方便为对象之外的访问或者操作的,所以需要限定以下是否可以操作成员。
封装特性就是对于成员操作进行限制的保护性措施!

面向对象的封装分为三个级别:
私有化封装 OK
受保护的封装(暂时不讲,在继承章节讲解)
公共的封装 OK

对象/类成员的访问:
1.当前类/对象内部访问 (在类的结构内部)
2.类和对象的外部访问 (在类的结构外部)
3.类和对象的子类/子对象的访问(在类的结构外部,在子类/对象的内部)


私有化封装:
方法:在成员属性或者方法名称之前,添加双下划线,就可以私有化成员。
特征:私有化的成员属性和方法,无法在类/对象的外部访问;私有化成员仅允许在类/对象的内部访问

公共的封装:
方法: 任何成员在没有进行私有化操作的时候默认都是公共的封装。
特征: 公共的封装成员属性和方法,在任何位置都可以被访问。


python封装的迷幻~:(了解,但是不允许使用)
其实python没由实现和其他语言一样的面向对象封装策略(还不是很完备)

私有化封装采用了name mangling(改名) 的策略实现的私有化操作。并不是真正的私有优化!
改名策略:将原有成员属性或者方法名 修改为 _类名__成员名

1.封装的特性实例1

 1 #封装的特性实例1
 2 #声明一个人类
 3 class Human:
 4     #成员属性
 5     name = '张三'#允许别人使用
 6     __sex  = '' #不允许别人访问
 7     age = 18
 8     heart = '健康心脏'#不允许别人访问
 9     __kidney  = '强大的肾脏'#不允许别人访问
10 
11     #成员方法
12     #唱歌
13     def sing(self):
14         print('都如艾米发馊拉稀都')
15 
16     #吃饭 #允许别人访问
17     def eat(self):
18         print('我最喜欢吃西红柿炒番茄了!')
19 
20     #跑步 #不允许别人访问
21     def __run(self):#私有化
22         print('121,121,锻炼身体')
23 
24     #聊天(用于测试类.对象的内部访问私有成员)
25     def talk(self):
26         print('我的名字是',self.name)
27         #在类/对象的内部访问私有成员属性
28         print('我的肾脏是非常好的',self.__kidney)
29         #在类/对象的内部访问私有成员方法
30         self.__run()
31 
32 
33 #实例化对象
34 zs = Human()
35 #print(zs)
36 #输出结果:<__main__.Human object at 0x000001BDBD370F98>
37 
38 #访问对象的成员属性和方法--------------------------------------
39 
40 #访问性别
41 #print(zs.sex)
42 #print(zs.__sex) #私有化封装之后,类/对象的外部无法访问!
43 #输出结果:AttributeError: 'Human' object has no attribute 'sex'
44 
45 #访问肾脏
46 #print(zs.kidney)
47 #print(zs.__kidney)#私有化封装之后,类/对象的外部无法访问!
48 #输出结果:AttributeError: 'Human' object has no attribute 'kidney'
49 
50 #调用唱歌方法
51 #zs.sing()
52 #输出结果:都如艾米发馊拉稀都
53 
54 #调用跑步方法
55 #zs.run()
56 #zs.__run()#私有化封装之后,类/对象的外部无法访问!
57 #输出结果:AttributeError: 'Human' object has no attribute 'run'
58 
59 #测试类./对象内部访问私有成员
60 zs.talk()
61 '''
62 输出结果:
63 我的名字是 张三
64 我的肾脏是非常好的 强大的肾脏
65 121,121,锻炼身体
66 '''

2.封装的特性实例2

 1 #封装的特性实例2
 2 #声明一个人类
 3 class Human:
 4     #成员属性
 5     name = '张三'#允许别人使用
 6     __sex  = '' #不允许别人访问
 7     age = 18
 8     heart = '健康心脏'#不允许别人访问
 9     __kidney  = '强大的肾脏'#不允许别人访问 #根据改名策略 将属性修改为 _类名__属性名 ->_Human__kidney
10 
11     #成员方法
12     #唱歌
13     def sing(self):
14         print('都如艾米发馊拉稀都')
15 
16     #吃饭 #允许别人访问
17     def eat(self):
18         print('我最喜欢吃西红柿炒番茄了!')
19 
20     #跑步 #不允许别人访问
21     def __run(self):#私有化
22         print('121,121,锻炼身体')
23 
24     #聊天(用于测试类.对象的内部访问私有成员)
25     def talk(self):
26         print('我的名字是',self.name)
27         #在类/对象的内部访问私有成员属性
28         print('我的肾脏是非常好的',self.__kidney)
29         #在类/对象的内部访问私有成员方法
30         self.__run()
31 
32 
33 #实例化对象
34 zs = Human()
35 
36 #访问私有化属性--肾脏
37 #print(zs.kidney)
38 #输出结果:AttributeError: 'Human' object has no attribute 'kidney'
39 #print(zs.__kidney)
40 #输出结果:AttributeError: 'Human' object has no attribute '__kidney'
41 
42 #知晓改名策略之后,可以访问私有成员(严禁任何人使用该方法访问私有成员)
43 print(zs._Human__kidney)
44 #输出结果:强大的肾脏
45 zs._Human__run()
46 #输出结果:121,121,锻炼身体

猜你喜欢

转载自www.cnblogs.com/lws865/p/10851459.html