class A: # def test(self): # print('A') pass class B(A): # def test(self): # print('B') pass class C(A): # def test(self): # print('c') pass class D(B): # def test(self): # print('D') pass class E(C): # def test(self): # print('E') pass class F(D,E): def test(self): print('F') # pass f1 = F() f1.test() print(F.__mro__) # (<class '__main__.F'>, <class '__main__.D'>, <class '__main__.B'>, <class '__main__.E'>, <class '__main__.C'>, <class '__main__.A'>, <class 'object'>) # python3都是新式类,所以依次执行顺序是FDBECA,可以看到最后有个object,其实这个是A类的基类,自动继承了object # python2中,当基类为经典类时,那么父类与子类都是经典类;当基类为新式类时,那么父类与子类都是新式类;python2经典类没有__mro__方法 ''' 继承顺序: python的类如果继承了多个类,那么其寻找方法的方式有两种,分别是深度优先和广度优先; 当类是经典类时,多继承情况下,会按照深度优先方式查找(从左至右,左边查到顶级,然后从右边开始查找),F-->D-->B-->A-->E-->C 当类是新式类时,多继承情况下,会按照广度优先方式查找(从左至右,左边不查到顶级---顶级的下一级,然后从右边开始查找且查找到顶级),F-->D-->B-->E-->C-->A ''' ''' python到底是如何实现继承的,对于你定义的每一个类,python会计算出一个方法解析顺序(MRO)列表,这个MRO列表就是一个简单的所有基类的线性顺序列表; 为了实现继承,python会在MRO列表上从左至右开始查找基类,直到找到第一个匹配这个属性的类为止。 而这个MRO列表的构造是通过一个C3线性化算法实现的,我们不去深究这个算法的数学理论,它实际上就是合并所有父类的MRO列表并遵循如下三条准则: 1、子类会先于父类被检查 2、多个父类会根据他们在元组中的顺序被检查 3、如果对下一个类存在两个合法的选择,选择第一个父类 '''