python继承顺序
python和C++一样,支持多继承。概念虽然容易,但是困难的工作是如果子类调用一个自身没有定义的属性,它是按照何种顺序去到父类寻找呢,尤其是众多父类中有多个都包含该同名属性。
class P1 #(object): def foo(self): print 'p1-foo' class P2 #(object): def foo(self): print 'p2-foo' def bar(self): print 'p2-bar' class C1 (P1,P2): pass class C2 (P1,P2): def bar(self): print 'C2-bar' class D(C1,C2): pass
对经典类和新式类来说,属性的查找顺序是不同的。现在我们分别看一下经典类和新式类两种不同的表现
1、经典类
d=D()
d.foo() # 输出 p1-foo
d.bar() # 输出 p2-bar
实例d调用foo()时,搜索顺序是 D => C1 => P1
实例d调用bar()时,搜索顺序是 D => C1 => P1 => P2
换句话说,经典类的搜索方式是按照“从左至右,深度优先”的方式去查找属性。d先查找自身是否有foo方法,没有则查找最近的父类C1里是否有该方法,如果没有则继续向上查找,直到在P1中找到该方法,查找结束。
2、新式类
使用新式类要去掉第一段代码中的注释
d=D()
d.foo() # 输出 p1-foo
d.bar() # 输出 c2-bar
实例d调用foo()时,搜索顺序是 D => C1 => C2 => P1
实例d调用bar()时,搜索顺序是 D => C1 => C2
可以看出,新式类的搜索方式是采用“广度优先”的方式去查找属性。
python继承顺序相关推荐
- python进阶数据_Python 进阶
高阶函数 定义 函数接受的参数是一个函数 函数的返回值为一个函数 满足以上2点中其中一个就是高阶函数 函数嵌套 定义 函数中def定义一个函数 嵌套会存在闭包, 其他情况不会有闭包(闭包闭的是变量) ...
- 春风桃李花开夜,秋雨梧桐叶落时——python面向对象三大特征(封装、继承、多态)
九重城阙烟尘生,千乘万骑西南行. 翠华摇摇行复止,西出都门百余里. 六军不发无奈何,宛转娥眉马前死. 花钿委地无人收,翠翘金雀玉搔头. 君王掩面救不得,回看血泪相和流. 黄埃散漫风萧索,云栈萦纡登剑阁 ...
- python多继承顺序_Python多重继承方法解析顺序(MRO构建算法)
分界 python的MRO算法有新旧两种,但并不是以python2和python3为界,具体的分隔为:在python2中如果定义类的时候没有指定父类是object,即定义为 class A: pass ...
- Python进阶-----类的继承顺序
python的类可以继承多个类,如果继承多个类,那么其寻找方法的方式有:深度优先和广度优先 基类或者父类继承了object类,那么该类就是新式类,否则便是经典类 当类是经典类时,多继承情况下,会按照深 ...
- python四十六:继承顺序之线性顺序列表
python是多继承,所以继承多个类时,会产生查找顺序的问题? 如下就是查找顺序 当类是经典类时,多继承情况下,会按照深度优先方式查找. 当类是新式类时,多继承情况下,会按照广度优先方式查找.(pyt ...
- python顺序结构有一个入口_高楼万丈平地起,基础要打牢!Python获取类的层次结构和继承顺序...
上一篇内容我们详细了解了Python使用inspect模块获取一个模块.类.实例.函数的信息及帮助文档的方法(参见新手入门到进阶,你不可不知的模块,用Python获取对象的详细信息). 前情提要 今天 ...
- python多重继承初始化顺序_Python 多重继承顺序
本文借鉴自 http://www.cnblogs.com/panyinghua/p/3283726.html 当类有多个超类,而且超类中有相同的方法时,继承顺序就很重要,如下: class A (de ...
- python中的继承冲突及继承顺序
python中的继承冲突及继承顺序 简单的菱形继承 设计类如下 #mermaid-svg-IYOh6g5InwMB9svy {font-family:"trebuchet ms", ...
- Python菱形继承的初始化问题和继承顺序
Python菱形继承的初始化问题和继承顺序 Python中,类通过继承的方式,子类可以获得父类的非私有属性和非私有方法,不需要自己再重新实现. 继承可以多层继承,即可以多代继承.也可以多继承,即一个子 ...
最新文章
- 关于GUI_DOWNLOAD中下载excel等文档的乱码问题
- 拓扑排序(完整案列及C语言完整代码实现)
- 作品第四课----agruments应用一求出函数参数的总合
- jquery 判断数据是否重复
- 螺旋遍历_螺旋形式的水平阶遍历
- css文件如何设置scss,Webpack - 如何将scss编译成单独的css文件?
- Shell脚本——入门
- Pandas 文本数据方法 cat()
- clclickhouse与bitmap的结合
- 计算机体系结构五大部分组成
- centos7yum安装VirtualBox
- php一句话 专杀,PHP-DDOS脚本专杀工具1.0 官方版
- 不透明度16进制值对照表
- oracle一次性说清楚,多种分隔符的一个字段拆分多行,再多行多列多种分隔符拆多行,最终处理超亿亿。。亿级别数据量
- 企业微信应用授权/静默登录
- 美式口语发音技巧:《发音总结》
- 机器学习 - 人脸识别
- Word 如何删除页面中的回车符 / 段落标记
- bootstrap的tooltip
- QT学习---QMainWindow
热门文章
- MySQL系列教程(一)
- 解题:使用 Promise 实现 machine 函数
- 深度deepin自研软件包格式“玲珑”:兼容所有Linux发行版
- 生产者消费者算法的简单实现
- 室内定位导航为啥小拓要选择蓝牙定位技术?
- Builder(生成器模式) 创建型
- OpenStack——自动安装部署
- 【正点原子FPGA连载】第二十三章 DDS信号发生器实验摘自【正点原子】DFZU2EG/4EV MPSoC 之FPGA开发指南V1.0
- Sysinternals---Process Explorer
- 伊吹萃香 (Standard IO)