python

当前位置:首页 > python面向对象 > 当前文章

python面向对象

python多继承C3算法,广度优先深度优先

2020-04-06 81赞 python中国网
每篇文章努力于解决一个问题!python高级、python面试全套、操作系统经典课等可移步文章底部。

  在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()

武当老祖张三丰....

文章评论

python多继承C3算法,广度优先深度优先文章写得不错,值得赞赏