python 类的多继承 深度优先和广度优先

1.新式类和经典类的区里

Python 2.x中默认都是经典类,只有显式继承了object才是新式类
Python 3.x中默认都是新式类,不必显式的继承object

2.多继承

class 类名(父类1, 父类2, ...)
    类体  

3.深度优先

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

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

4.广度优先

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

两个概念图







扫描二维码关注公众号,回复: 2390852 查看本文章





4.深度优先

猜你喜欢

转载自blog.csdn.net/kaikai136412162/article/details/80856016
今日推荐