python 多继承中方法的调用顺序
python支持多继承,如果子类没有重写__init__()
方法,则默认会调用父类的__init__()
方法。如果重写了则不会调用父类的,但是可以通过super().__init__()
显示调用。
这里通过__init()__
来展示python在多继承中,方法的调用顺序。
多继承 -> 广度优先搜索
单继承 -> 深度优先搜索
# python 继承多态# python 继承多态class A:def __init__(self):print("A")print("A -- end")
class B(A):def __init__(self):print("B")super().__init__()print("B -- end")class C(A):def __init__(self):print("C")super().__init__()print("C -- end")class D(B, C):def __init__(self):print("D")super().__init__()print("D -- end")if __name__ == '__main__':d = D()
执行结果
D
B
C
A
A -- end
C -- end
B -- end
D -- end
可以通过以上结果推断,python中类方法的执行顺序是
- 在自己区域内寻找
- 在父类中寻找(从左往右[继承顺序固定])
- 多继承广度优先搜索,单继承深度优先搜索(先在某一层的父类中全部寻找完,才去找下一个祖宗类)
通过 print(D.__mro__)
打印继承顺序
(<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>
)
python 多继承中方法的调用顺序相关推荐
- java构造函数调用其他程序的顺序,java关于继承中构造函数的调用顺序
public class Constraction_Test { /** * 在java中用子类去创建一个对象的时候会首先调用父类的无参构造函数 * 然后再去调用自己的构造函数 * @param ar ...
- Silverlight 主页与页面用户组件中方法的调用顺序
主页:UseNewUserControlPage.xaml <navigation:Page x:Class="UseUserControl.UseNewUserControlPage ...
- C++继承中构造和析构顺序
C++继承中构造和析构顺序 继承中构造和析构顺序 问题:父类和子类的构造和析构顺序是谁先谁后? 示例 继承中构造和析构顺序 子类继承父类后,当创建子类对象,也会调用父类的构造函数 问题:父类和子类的构 ...
- php继承和重载区别,php继承中方法重载(覆盖)的应用场合
php继承中方法重载(覆盖)的应用场合 发布于 2015-02-23 17:57:23 | 91 次阅读 | 评论: 0 | 来源: 网友投递 PHP开源脚本语言PHP(外文名: Hypertext ...
- 继承中的构造方法执行顺序
继承中的构造方法执行顺序 在子父类中,创建子类对象,调用子类的构造方法, 在子类的构造方法的第一行代码如果没有调用父类的构造或者没有调用子类的其他构造,则默认调用父类无参构造. 为什么要调用父类构造? ...
- java调用方法_JAVA中方法的调用(详细整理)
JAVA中方法的调用主要有以下几种: 1.非静态方法 非静态方法就是没有 static 修饰的方法,对于非静态方法的调用,是通过对 象来调用的,表现形式如下. 对象名.方法() eg: public ...
- JAVA中方法的调用(详细整理)
JAVA中方法的调用主要有以下几种: 1.非静态方法 非静态方法就是没有 static 修饰的方法,对于非静态方法的调用,是通过对 象来调用的,表现形式如下. 对象名.方法() eg: public ...
- JAVA中方法的调用
JAVA中方法的调用主要有以下几种: 1.非静态方法 非静态方法就是没有 static 修饰的方法,对于非静态方法的调用,是通过对 象来调用的,表现形式如下. 对象名.方法() eg: public ...
- python类中方法的执行顺序-浅谈Python的方法解析顺序(MRO)
方法解析顺序, Method Resolution Order 从一段代码开始 考虑下面的情况: class A(object): def foo(self): print('A.foo()') cl ...
最新文章
- WPF自学入门(十一)WPF MVVM模式Command命令 WPF自学入门(十)WPF MVVM简单介绍...
- SoC嵌入式软件架构设计之中的一个:系统内存需求评估
- 比较.ASP.NET中Application,Session,Cookie,ViewState和Cache
- linux mint(Ubuntu、Debian) 18修改环境变量
- 第四讲 Python3中的int型和浮点型
- ttf能改成gfont吗_一楼业主把半地下室窗户改成门,出来就是下沉式小花园,摊上事了...
- 根据字符串自动构造对应类
- 【剑指offer】面试题31:栈的压入、弹出序列(Java)
- python dataframe 列赋值_dataframe根据新列特征的条件为其赋值,给
- VueRouter源码分析
- jmeter学习总结
- Java编程思想(第4版)(评注版)
- 拓端tecdat|适用于NLP自然语言处理的Python:使用Facebook FastText库
- 手把手较你编写Python爬虫程序-不要干坏事哦
- java减号的正则_java 正则匹配 特殊字符 减号- 的情况,处理方式
- 学习笔记-安全-MAC地址攻击
- 图片服务器-存储图片技巧
- glassfish插件_Eclipse4.2.2安装GlassFish插件
- 【编程题m_0031】句子反转(小米2017秋招真题)
- 永恒之蓝 ms17_010漏洞