python 单一继承定义_python 单继承、多继承、菱形继承
单继承与多继承
单继承:一个类只能继承一个父类的方式。
多继承:一个类可以继承多个父类的方式。
单继承:(生物角度)
人类->哺乳类动物->动物->生物->有机物....
多继承:(社会角度)
舞蹈老师(教舞蹈) 体育老师(运动) 爸爸(抽烟) 妈妈(打扫卫生)
我(舞蹈,运动,抽烟,打扫卫生)
单继承案例:
父类:
pass
子类(父类):
pass
多继承案例:
父类1:
pass
父类2:
pass
父类3:
pass
子类(父类1,父类2,父类3):
pass
多继承的问题所在:菱形继承或者钻石继承中的问题。
菱形继承的bug解决:
MRO列表和super 类
当我们定义一个菱形继承关系的时候,程序会自动生成一个新的MRO列表。
MRO列表: Method Realtion Order 方法关系列表。
MRO列表的生成采用了C3算法完成的。
C3算法的原则:1.子类永远在父类的前面2.同一等级的类,按照子类中的继承顺序摆放
super()调用的时候,不是查找父类!!!! 实际上super是查找MRO列表的上一个类
super()调用对象方法的时候不需要传入对象,自动传入
补充:如果需要查看mro列表,可以使用对象.mro() 方法查看(非必要~)
1.单继承案例
1 #单继承案例
2 ‘‘‘
3 爷爷类4 爸爸类5 儿子类6 ‘‘‘
7
8 #爷爷类
9 classGroundFather:10 #属性
11 skin = ‘黄色‘
12 #方法
13 defsay(self):14 print(‘说话中‘)15
16 #爸爸类
17 classFather(GroundFather):18 #属性
19 eye = ‘水汪汪的小眼睛‘
20 #方法
21 defwalk(self):22 print(‘走走~停停中~‘)23
24 #儿子类
25 classSon(Father):26 pass
27
28 #实例化儿子对象
29 erzi =Son()30 print(erzi)31 #输出结果:<__main__.son object at>
32
33 #调用方法或者属性
34 print(erzi.skin)35 #输出结果:黄色
36
37 print(erzi.eye)38 #输出结果:水汪汪的小眼睛
39
40 erzi.say()41 #输出结果:说话中
42
43 #erzi.walk()
44 #输出结果:
2.多继承案例
1 #多继承案例
2 ‘‘‘
3 音乐老师类:4 体育老师类:5 爸爸类:6 妈妈类:7 ‘‘‘
8 #音乐老师类
9 classMusicTeacher:10 #属性
11 cloth = ‘晚礼服‘
12 #方法
13 defsing(self):14 print(‘门前大桥下,路过一群鸭,快来快来数一数,2,4,6,7,8.。‘)15 #体育老师类
16 classSportTeahcer:17 #方法
18 defrun(self):19 print(‘跑步功能‘)20
21 defjump(self):22 print(‘you jump,i jump‘)23 #爸爸类
24 classFather:25 #方法
26 defsmoking(self):27 print(‘抽烟中~~‘)28 #妈妈类
29 classMother:30 #方法
31 defclear(self):32 print(‘打扫房间。。‘)33 #我的类(多继承)
34 classMe(Mother,Father,MusicTeacher,SportTeahcer):35 pass
36
37 #实例化对象
38 i =Me()39 #调用成员
40 print(i.cloth)41 #输出结果:晚礼服
42
43 i.sing()44 #输出结果:门前大桥下,路过一群鸭,快来快来数一数,2,4,6,7,8.。
45
46 i.jump()47 #输出结果:you jump,i jump
48
49 i.run()50 #输出结果:跑步功能
51
52 i.smoking()53 #输出结果:抽烟中~~
54
55 i.clear()56 #输出结果:打扫房间。。
3.菱形继承,BUG案例
1 #菱形继承,BUG案例
2 ‘‘‘
3 A类(动物类)4 B类(人类)5 C类(鸟类)6 D类(鸟人类)7 ‘‘‘
8 #动物类 A类
9 classAnimal:10 #发声的方法
11 defsay(self):12 print(‘Animal类准备开始发音‘)13 print(‘Animal类发音结束‘)14
15 #人类 B类
16 classHuman(Animal):17 #发音的方法
18 defsay(self):19 print(‘Human类准备开始发音‘)20 #调用父类中的发音功能
21 Animal.say(self)22 print(‘Human类发音结束‘)23
24 #鸟类 C类
25 classBird(Animal):26 #发音的方法
27 defsay(self):28 print(‘Bird类准备开始发音‘)29 #调用父类的发音功能
30 Animal.say(self)31 print(‘Bird类发音结束‘)32
33 #鸟人类
34 classBirdMan(Human,Bird):35 #发音的方法
36 defsay(self):37 print(‘BirdMan类准备开始发音‘)38 #调用人类的发音
39 Human.say(self)40 #调用鸟类的发音
41 Bird.say(self)42 print(‘BirdMan类发音结束‘)43
44 #实例化一个鸟人对象
45 bm =BirdMan()46 #调用说话方法
47 bm.say()48 ‘‘‘
49 输出结果:50 BirdMan类准备开始发音51 Human类准备开始发音52 Animal类准备开始发音53 Animal类发音结束54 Human类发音结束55 Bird类准备开始发音56 Animal类准备开始发音57 Animal类发音结束58 Bird类发音结束59 BirdMan类发音结束60 ‘‘‘
61 ‘‘‘
62 菱形继承中的bug所在,某个方法在继承中被多次调用!。(如果该方法具有唯一或者计时类似的特性则无法使用。)63 上面案例 Animal类在菱形继承中子类只调用一次但,而Animal类却被调用两次,这就是菱形继承的BUG64 Animal类准备开始发音65 Animal类发音结束66
67 ‘‘‘
68 #菱形继承中的bug所在,某个方法在继承中被多次调用!。(如果该方法具有唯一或者计时类似的特性则无法使用。)
4.菱形继承,super()解决BUG案例
1 #菱形继承,super()解决BUG案例
2 ‘‘‘
3 A类(动物类)4 B类(人类)5 C类(鸟类)6 D类(鸟人类)7 ‘‘‘
8
9 #动物类 A类
10 classAnimal:11 #发声的方法
12 defsay(self):13 print(‘Animal类准备开始发音‘)14 print(‘Animal类发音结束‘)15
16 #人类 B类
17 classHuman(Animal):18 #发音的方法
19 defsay(self):20 print(‘Human类准备开始发音‘)21 #调用MRO列表中的上一层类的发音功能
22 super().say()23 print(‘Human类发音结束‘)24
25 #鸟类 C类
26 classBird(Animal):27 #发音的方法
28 defsay(self):29 print(‘Bird类准备开始发音‘)30 #调用MRO列表中的上一层类的发音功能
31 super().say()32 print(‘Bird类发音结束‘)33
34 #鸟人类
35 classBirdMan(Human,Bird):36 #发音的方法
37 defsay(self):38 print(‘BirdMan类准备开始发音‘)39 #调用MRO列表中的上一层类的发音功能
40 super().say()41 print(‘BirdMan类发音结束‘)42
43 #实例化一个鸟人对象
44 bm =BirdMan()45 #调用说话方法
46 bm.say()47 ‘‘‘
48 输出结果:49 BirdMan类准备开始发音50 Human类准备开始发音51 Bird类准备开始发音52 Animal类准备开始发音53 Animal类发音结束54 Bird类发音结束55 Human类发音结束56 BirdMan类发音结束57 ‘‘‘
58 #MRO列表 -> BirdMan,Human,Bird,Animal,object
59 #查看super
60 print(super)#super是个类
61 #输出结果:
python 单一继承定义_python 单继承、多继承、菱形继承相关推荐
- python 单一继承定义_Python学习之单继承与多继承
继承 面向对象编程语言的一个主要功能就是"继承". 继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展. (1)单继承:pytho ...
- python中类的定义_python 类中定义类
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 现有自定义类(color.py)如下,类位于路径'userschuxingpyt ...
- python变量的定义_Python变量的定义
Python变量的定义 Python 变量类型 变量存储在内存中的值.这就意味着在创建变量时会在内存中开辟一个空间. 基于变量的数据类型,解释器会分配指定内存,并决定什么数据可以被存储在内存中. 因此 ...
- python函数参数定义_python函数定义中的5种参数
python函数参数定义 Python函数定义中的5种参数类型: (5 Types of Arguments in Python Function Definition:) default argum ...
- python和表格关系_python – 单表继承上的SQLAlchemy一对多关系...
我之前正在努力解决这个问题.我能够让这种自我指涉关系发挥作用: class Employee(Base): __tablename__ = 'employee' id = Column(Integer ...
- python类class定义_python基础教程之类class定义使用方法
面对对象(oop)中的对象,是一个非常重要的知识点,我们可以把它简单看做是数据以及由存取.操作这些数据的方法所组成的一个集合.我们在学习函数(function)之后,知道了如果重用代码,那为什么还要用 ...
- python中算法定义_python算法
引言 定义:算法就是按照一定步骤解决问题的办法 属性: 正确:就是可以正确的求解问题 快速:就是时间复杂度要尽量小 有穷性:要在有限个步骤解决问题 渐进分析法为什么可以做到与算法运行硬件环境无关? 算 ...
- python链表怎么定义_Python数据结构之双向链表的定义与使用方法示例
本文实例讲述了Python数据结构之双向链表的定义与使用方法.分享给大家供大家参考,具体如下: 和单链表类似,只不过是增加了一个指向前面一个元素的指针而已. 示意图: python 实现代码: #!/ ...
- python语言字符串定义_Python字符串(string)
简介 字符串(string)类型是python标准类型之一,也就是"文本"类型,并且字符串是不可更改的数据类型,意味着不能单独改变其中的某个值.与其他语言不同,python中没有字 ...
- python输入python显示未定义_python 未定义
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! sdk 3.0 实现了统一化,各个语言版本的 sdk具备使用方法相同.接口调用方 ...
最新文章
- mysql集群安装(centos)
- 23-hadoop-hive的DDL和DML操作
- Linux主机WordPress伪静态设置方法
- vmware虚拟机移植带来的问题
- centos yum安装时出现 cannot find a valid baseurl for repo: addons
- 头发一周洗几次才适宜? - 生活至上,美容至尚!
- html加载完显示图片,js图片未加载完显示loading效果
- python3 将unicode转中文
- Windows 8.1 升级到专业版
- 动态壁纸小程序(带流量主)源码
- 面试官系统精讲Java源码及大厂真题 - 45 Socket 源码及面试题
- 浅析Ruby on Rails部署方案(三)
- 外参矩阵转四元数,左右手坐标系转化1
- python 10的次方_python e次方
- R语言初级教程(01): R编程环境的搭建
- fflush()函数
- linux系统下mysql编码格式,Windows、Linux系统下mysql编码设置
- shell 命令下载软件 安装软件
- Cesium for Unreal 数据加载 场景漫游 粒子效果 视频监控 VR预览
- 回忆着你对我的承诺、一切的一切在那个夏季散了
热门文章
- BUUCTF:[0CTF 2016]piapiapia
- Kryo 缓冲区溢出
- php插入图片适应屏幕,PHPExcel:如何在首页页眉中插入图片并将其放大以适应其内容?...
- 第五次:对比分析《大唐仙妖劫》和《梦幻西游》
- redission限流RedisException问题排查
- 【DirectX学习笔记】02_D3D初始化
- web页面实现剪切板图片黏贴功能
- android编程异常解决 FATAL EXCEPTION: main android.view.InflateException: Binary XML file line #195: Erro
- 《娱乐至死》读书笔记(part2)--到处是水却没有一滴水可以喝
- python编程基础及应用(重庆大学):7-7 计算用户输入句子中的单词数量以及单词平均长度