封装,继承与多态
封装特征:
实际工作中很多的成员不方便为对象之外的访问或者操作的,所以需要限定以下是否可以操作成员。
封装特性就是对于成员操作进行限制的保护性措施!
面向对象的封装分为三个级别:
私有化封装 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,锻炼身体
转载于:https://www.cnblogs.com/lws865/p/10851459.html
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/100929.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...