Python多重继承
- 1、Python多重继承
- 2、Python多重继承的顺序
1、Python多重继承
继承是面向对象编程的一大特征,继承可以使得子类具有父类的属性和方法,并可对属性和方法进行扩展。Python中继承的最大特点是支持多重继承,也即一个类可以同时继承多个类
我们可以在新类中使用父类定义的方法,也可以定义同名方法,覆盖父类的方法,还可以在自定义的方法中使用super()调用父类的同名方法
那么如果从多个类继承,多个类中又实现了同名的方法,那岂不是乱套了吗?
class A(object):
def f0(self):
print('A f0')
def f1(self):
print('A f1')
class B(object):
def f0(self):
print('B f0')
def f1(self):
print('B f1')
class C(A, B):
def f0(self):
print('C f0')
class D(B, A):
def f1(self):
print('D f1')
# __mro__属性用于记录类继承的关系,返回一个元组类型
print(C.__mro__) # (<class '__main__.C'>, <class '__main__.A'>, <class '__main__.B'>, <class 'object'>)
c = C()
c.f0() # C f0
print(D.__mro__) # (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.A'>, <class 'object'>)
d = D()
d.f1() # D f1
2、Python多重继承的顺序
我们发现,Python支持多继承是有顺序的。那么Python是如何确定它们继承的顺序呢?
Python多继承顺序被称为方法解释顺序(MRO,Method Resolution Order)。Python2.3版本后采用C3线性序列算法来计算MRO
类之间的继承关系可以用有向无环图(DAG,Directed Acyclic Graph)来描述,每个顶点代表一个类,顶点之间的有向边代表类之间的继承关系。C3算法对所有顶点进行线性排序
参考文档:https://pythonhowto.readthedocs.io/zh-cn/latest/object.html#id29