在python中,一个A类同时继承B类和C类,传参顺序是B在左,C在右。B类和C类分别继承了BB类和CC类,此时此刻如果A类去查找一个方法有2种选择,1是广度优先,2是深度优先。
广度优先是先查询第一层B类和C类,如果都没有再往上查。深度优先是先查找B类,再查找BB类,如果没有再查找C和CC。
在python 2中,经典类采用的是深度优先查找法, 新式类采用的是广度优先;python3在多继承时采用一种新的C3算法来遍历父类,复杂的类看不出来是广度还是深度优先。
我们先写一个简单的例子,能看出来是广度优先还是深度优先的:
# -*- coding: utf-8 -*-
class WudangBase:
def fly(self):
print("武当老祖张三丰....")
class JiuyangBase:
def fly(self):
print("九阳真经老祖郭靖....")
class Wudang(WudangBase):
pass
class Jiuyang(JiuyangBase):
def fly(self):
print("九阳真经飞行术...")
class WuJi(Wudang,Jiuyang):
pass
if __name__ == "__main__":
p1= WuJi()
p1.fly()
武当老祖张三丰....