一、问题提出
python支持多继承,当有两个父类A 和 B都有一个方法m时,C类继承了A、B,当调用m的时候,用的是A类的m呢还是B类的m呢?
这个就需要用到方法解析顺序MRO了,目前用的是C3方法。
二、验证
1. 代码
#coding:utf-8
class parent1():
def __init__(self):
print("im one")
super().__init__()
def show(self):
print("im one show")
class parent2():
def __init__(self):
print("im two")
#super().__init__()
def show(self):
print("im two show")
class child(parent1,parent2):
def __init__(self):
super().__init__()
print("MRO:",[x.__name__ for x in child.__mro__])
aa = child()
aa.show()
2.运行结果为:
MRO: ['child', 'parent1', 'parent2', 'object']
im one
im two
im one show
3.分析
MRO路径为: ['child', 'parent1', 'parent2', 'object']
C3方法参考这里:http://c.biancheng.net/view/5450.html
用super()初始化父类构造函数,如果parent1构造函数中没有super().__init__(),那么parent2将不会被初始化到
子类函数的调用根据MRO路径查找