一、类的分类

1.1 新式类

  • 继承了object的类以及该类的子类,都是新式类
  • Python3中所有的类都是新式类

1.2 经典类

  • 没有继承object的类以及该类的子类,都是经典类
  • 只有Python2中才有经典类

二、菱形继承问题

在Java和C#中子类只能继承一个父类,而Python中子类可以同时继承多个父类,如A(B,C,D)

如果继承关系为非菱形结构,则会按照先找B这一条分支,然后再找C这一条分支,最后找D这一条分支的顺序直到找到我们想要的属性

如果继承关系为菱形结构,即子类的父类最后继承了同一个类,那么属性的查找方式有两种:

  • 经典类下:深度优先
  • 广度优先:广度优先
  • 经典类:一条路走到黑,深度优先

  • 新式类:不找多各类最后继承的同一个类,直接去找下一个父类,广度优先

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 .
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
class G(object):# def test(self):#     print('from G')passprint(G.__bases__)class E(G):# def test(self):#     print('from E')passclass B(E):# def test(self):#     print('from B')passclass F(G):# def test(self):#     print('from F')passclass C(F):# def test(self):#     print('from C')passclass D(G):# def test(self):#     print('from D')passclass A(B, C, D):def test(self):print('from A')obj = A()
(<class 'object'>,)
obj.test()  # A->B->E-C-F-D->G-object
from A

三、C3算法与mro()方法介绍

python到底是如何实现继承的,对于你定义的每一个类,python会计算出一个方法解析顺序(MRO)列表,这个MRO列表就是一个简单的所有基类的线性顺序列表,如:

'''
遇到问题没人解答?小编创建了一个Python学习交流QQ群:857662006 .
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
print(A.mro())  # A.__mro__
[<class '__main__.A'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.F'>, <class '__main__.D'>, <class '__main__.G'>, <class 'object'>]
for i in A.mro():print(i)
<class '__main__.A'>
<class '__main__.B'>
<class '__main__.E'>
<class '__main__.C'>
<class '__main__.F'>
<class '__main__.D'>
<class '__main__.G'>
<class 'object'>

为了实现继承,python会在MRO列表上从左到右开始查找基类,直到找到第一个匹配这个属性的类为止。

而这个MRO列表的构造是通过一个C3线性化算法来实现的。我们不去深究这个算法的数学原理,它实际上就是合并所有父类的MRO列表并遵循如下三条准则:

  1. 子类会先于父类被检查
  2. 多个父类会根据它们在列表中的顺序被检查
  3. 如果对下一个类存在两个合法的选择,选择第一个父类

Python基础教程:菱形继承问题相关推荐

  1. python基础教程第二版和第三版哪个好-python基础教程 2版和3版哪个适合新手?!...

    python基础教程 2版和3版哪个适合新手? 现在学是学python3. 两者的差异发者本身影响并不大,个别语法细微的差比如python3的print数方式使用,一些常用模块的名称差异,一些机制的差 ...

  2. python基础教程视频(全13集)-Python基础视频教程(600集)【传智播客精品教程】...

    Python基础视频教程 初级共600节课 本套视频是传智播客紧抓未来最大趋势--人工智能,应运而生的一套Python入门视频教程,Python是学习人工智能的首选语言,而该视频是专门针对零基础的学员 ...

  3. python基础教程第三版和第二版选哪个-python基础教程 2版和3版哪个适合新手?!...

    python基础教程 2版和3版哪个适合新手? 现在学是学python3. 两者的差异发者本身影响并不大,个别语法细微的差比如python3的print数方式使用,一些常用模块的名称差异,一些机制的差 ...

  4. python基础教程pdf百度云-《Python基础教程(第3版)》PDF高清版

    <python基础教程第3版>PDF高清版  百度云资源,内涵教材源代码 百度云链接:百度云盘 提取码:7r7o 编辑推荐 久负盛名的Python入门经典,是非常优秀的基础教程,深入浅出, ...

  5. python基础教程第三版怎么样-Python基础教程(第三版)(七)再谈抽象

    菜鸡的学习笔记. 7.1 对象魔法 多态:可对不同类型的对象执行相同的操作,但是操作将随对象所属的类型而异: 封装:对外隐藏对象内部工作原理的细节: 继承:可基于通用类创建出专用类. 按作者的意思,多 ...

  6. python基础教程笔记—即时标记(详解)

    最近一直在学习python,语法部分差不多看完了,想写一写python基础教程后面的第一个项目.因为我在网上看到的别人的博客讲解都并不是特别详细,仅仅是贴一下代码,书上内容照搬一下,对于当时刚学习py ...

  7. python基础教程-学习python有什么好的视频教程?

    干货来袭,以下均为python好的学习视频,我们先从python的入门教程开始分享起! python入门教程(600集)https://www.bilibili.com/video/BV1ex411x ...

  8. python基础教程电子版-Python基础教程(第2版 修订版) pdf

    Python基础教程(第2版 修订版) 目录 D11章快速改造:基础知识1 1.1安装Python1 1.1.1Windows1 1.1.2Linux和UNIX3 1.1.3苹果机(Macintosh ...

  9. python基础教程-《Python基础教程(第3版)》PDF高清版

    <python基础教程第3版>PDF高清版  百度云资源,内涵教材源代码 百度云链接:百度云盘 提取码:7r7o 编辑推荐 久负盛名的Python入门经典,是非常优秀的基础教程,深入浅出, ...

  10. python基础教程-Python入门教程完整版(懂中文就能学会)

    提取码:sjfo 目录大纲: 本套教程15天 学前环境搭建 1-3 天内容为Linux基础命令 4-13 天内容为Python基础教程 14-15 天内容为 飞机大战项目演练 视频概括: 第一阶段(1 ...

最新文章

  1. 趣谈网络协议笔记-二(第六讲)
  2. mysql8只从配置_mysql8的配置优化
  3. 中国银行业100强发布,头部名企为何选择永洪科技?
  4. 嵌入式笔录(2)-电阻串联与并联
  5. linux 跨IP拷贝命令 scp
  6. 小学三年级上册计算机计划,小学三年级数学上册教学计划
  7. SQuirreL SQL Client3.8 连接 HIVE2.2
  8. 交流充电桩电路图_直流充电桩和交流充电桩给电动汽车充电过程中是如何工作的?...
  9. java分支语句有哪些_Java代码多分支语句优化
  10. struts2.1.6出现at com.opensymphony.xwork2.util.FileManager$FileRevision.needsReloading
  11. 【分布式】一致性协议
  12. 学习 Shell —— 认识 shell
  13. KELL 平台 DM9000驱动
  14. 微计算机cpu是指什么,微处理器和CPU的不同是什么
  15. ES6模板字符串中使用变量
  16. android apk很大,从Android Studio生成的Apk文件太大
  17. 老王的JAVA基础课:第6课 JAVA基本数据类型
  18. Visio 安装暴雷记录
  19. 工具使用分享之爱思助手安装苹果APP
  20. 微信公众号的二次开发(一 订阅号没有获取网页授权的解决方法)

热门文章

  1. Python 3.4.4 学习笔记(004)python manuals/the python tutorial -- 3. An Informal Introduction to Python...
  2. ACM论文格式上常见的一些错误
  3. C#基础知识整理:基础知识(1) Main方法
  4. 第五节 8登陆练习操作
  5. IIS 错误代码大汇总
  6. 【MM】需求类型清单
  7. 详解边缘计算:为何而起、优势如何、哪些玩家以及正在爆发的场景
  8. 物料管理的容差范围维护
  9. 标准程序的Parameter id 并不一定准确
  10. 条件 CHAIN 语句