经典类与新式式的对比
一、关于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()