#!/usr/bin/env python
# -*- coding:utf-8 -*-
# author:love_cat

class A:
    def __init__(self):
        print("A")

class B(A):
    def __init__(self):
        print("B")
        super(B, self).__init__()

class C(A):
    def __init__(self):
        print("C")
        super(C, self).__init__()

class D(B, C):
    def __init__(self):
        print("D")
        super(D, self).__init__()

d = D()

# 那么会打印什么结果
# 我们可能会想到,d = D(),首先会打印D,再执行父类的init方法,然后打印B,然后打印A
# 所以运行结果应该是依次打印,D,B,A
# 然而运行结果是
'''
D
B
C
A
'''

# 为什么会是这样,首先说super调用父类其实不太准确,super调用是基于mro线性查找
print(D.__mro__)
'''
<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>)
'''
# 所以会依次调用类D,C,B,A的构造方法

最新文章

  1. 在Visual Studio Code中配置GO开发环境
  2. U3D 动画帧事件问题
  3. Apache-Commons包作用说明
  4. highchart 设置双Y轴坐标 双x轴坐标方法
  5. 【原创】OPA857 TEST模式使用
  6. Berkeley DB的常见API简单分析
  7. phalcon: Profiling分析 profilter / Plugin结合,dispatcher调度控制器 监听sql执行日志
  8. 【转】cocos2d-x学习笔记03:绘制基本图元
  9. mysql通过SOURCE导入SQL时报错处理
  10. 监听手机晃动(摇一摇)SensorEventListener
  11. tp5中设置指定的log日志,可单独建立文件夹和文件名
  12. [POI2009]KAM-Pebbles
  13. docker的网络访问
  14. 从已删除邮箱copy数据到活动邮箱
  15. MySQL 之 MHA + ProxySQL + keepalived 实现读写分离,高可用(三)
  16. Siamese Neural Networks for One-shot Image Recognition
  17. 值类型之间的相互转化,运算符,if条件判断,循环,函数
  18. python中的sockeserver模块简单实用
  19. 关于Jquery使用中遇到典型问题集锦
  20. [转载]AMD 的 CommonJS wrapping

热门文章

  1. 命名空间“System.Web.Http”中不存在类型或命名空间名称“Description”(是否缺少程序集引用?)
  2. 关于JavaScript设计模式的学习(二)
  3. JNDI和JDBC的区别和联系及其使用方法
  4. ThreadLocal 学习
  5. Anaconda基本使用
  6. 那些牛掰的 HTML5的API(二)
  7. RabbitMQ磁盘警报
  8. Scala 基础(1)—— 定义变量 &amp; 定义函数
  9. vue.$refs 的用法
  10. POJ 3090 Visible Lattice Points | 其实是欧拉函数