【Python3_进阶系列_014】Python2,3多继承的区别-MRO

一.结论

首先抛出结论,Python类的多继承时的继承顺序:

python2采用的是深度优先的继承方式,python3采用的是广度优先的方式

二.验证例子

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

class B(A):
    def f2(self):
        pass

class C(A):
    def f1(self):
        print("C")

class D(B,C):
    pass

d = D()
d.f1()

输出:

Python2:A

Python3:C

 

原因:

Python2的深度优先,D首先查找父类B,B没有f1,深度查找B的父类A,A有f1(),所以输出A。

Python3的广度优先,所以实际多继承的时候,D首先查找父类B,B因为没有f1方法,所以直接查找C的f1()方法并且找到,所以输出C。

类似的图

 

 

详情可以参考这篇文章:

https://blog.csdn.net/qwertyupoiuytr/article/details/56439134 

 

posted @ 2019-01-07 15:59  爱寂寞撒的谎言  阅读(231)  评论(0)    收藏  举报