经典类与新式式的对比

一、关于python类继承的问题

python语言与java不一样,是多继承的,既然是多继承就可能出现几个父类,当多个父类的时候出现相同的方法或许属性的时候,子类就会出现继承那个父类的方法或属性.

python中新式类都是采用深度优先的方式继承

python中经典类都是采用广度的方式继承

二、关于深度优先与广度优先的认识

  • 1、深度优先(新式类)

    关于下面图的查询顺序(A-B-D-E-I-C-F-G-H)

    深入优先

  • 2、广度优先(经典类)

    关于下面图查询顺序(A-B-C-D-E-F-G-H-I)

    广度优先

三、重点说明

不管是深入优先, 还是广度优先,查询的顺序都是从继承的左边开始,例如

class Foo(Foo1, Foo2):
    # 会先查询Foo1,再查询Foo2
    pass

四、python深度优先继承演示

由于本书是使用python 3.6因此都是采用深入优先的继承方式

  • 1、演示代码

    class D(object):
    
        def bar(self):
            print 'D.bar'
    
    class C(D):
    
        def bar(self):
            print 'C.bar'
    
    class B(D):
    
        def bar(self):
            print 'B.bar'
    
    class A(B, C):
    
        def bar(self):
            print 'A.bar'
    
    a = A()
    # 执行bar方法时
    # 首先去A类中查找,如果A类中没有,则继续去B类中找,如果B类中么有,则继续去C类中找,如果C类中么有,则继续去D类中找,如果还是未找到,则报错
    # 所以,查找顺序:A --> B --> C --> D
    # 在上述查找bar方法的过程中,一旦找到,则寻找过程立即中断,便不会再继续找了
    a.bar()
    

results matching ""

    No results matching ""