开发者社区> 问答> 正文

Python中面向对象深度优先和广度优先是什么?

Python中面向对象深度优先和广度优先是什么?

展开
收起
真的很搞笑 2021-11-04 21:31:37 461 0
1 条回答
写回答
取消 提交回答
  • MRO即方法解析顺序(method resolution order),用于判断子类调用的属性来自于哪个父类。在Python2.3之前,MRO是基于深度优先算法的,自2.3开始使用C3算法,定义类时需要继承object,这样的类称为新式类,否则为旧式类

    经典类采用深度优先搜索

    class P1:
    def foo(self):
    print 'p1-foo'

    class P2 :
    def foo(self):
    print 'p2-foo'

     def bar(self):   
         print 'p2-bar'   
    

    class C1 (P1,P2):
    pass

    class C2 (P1,P2):
    def bar(self):
    print 'C2-bar'

    class D(C1,C2):
    pass

    d = D()
    d.foo() # 输出 p1-foo
    d.bar() # 输出 p2-bar 实例d调用foo()时,搜索顺序是 D => C1 => P1

    实例d调用bar()时,搜索顺序是 D => C1 => P1 => P2

    经典类的搜索方式:从左到右,深度优先

    新式类采用广度优先搜索

    class P1(object):
    def foo(self):
    print 'p1-foo'

    class P2(object):
    def foo(self):
    print 'p2-foo'

     def bar(self):   
         print 'p2-bar'   
    

    class C1 (P1,P2):
    pass

    class C2 (P1,P2):
    def bar(self):
    print 'C2-bar'

    class D(C1,C2):
    pass

    d=D()
    d.foo() # 输出 p1-foo
    d.bar() # 输出 c2-bar 实例d调用foo()时,搜索顺序是 D => C1 => C2 => P1 实例d调用bar()时,搜索顺序是 D => C1 => C2

    2021-11-04 21:32:06
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载