在python2中,有新式类与旧式类的区别;
首先创建一个类:
class Sb(object):
pass
如果创建时继承自object,说明这是一个新式类,不写object,说明是一个旧式类;
那么新式类与旧式类有什么区别呢?
区别就在于查找继承的属性时所遵循的算法不同。
举例说明:
1 class A: 2 def __init__(self): 3 age = 10 4 5 class B(A): 6 pass 7 8 class C(A): 9 pass 10 11 class D(B,C): 12 pass
那么这几个类的关系如图:
使用D的属性:
d = D()
d.age
此时要使用这个属性,就要到D的父类中查找,先查找完B,接下来是往上继续查找B的父类A呢,还是查找过C再找A呢?
新式类与旧式类的区别就在这里。
新式类:找过B,接着找C,C还没有,再去找它们的父类,使用的是广度优先的算法;
旧式类:找过B,接着找B的父类A,如果没有,再找C,使用的是深度优先的算法;
在python3中都是新式类,也就是说查找继承的属性时按照广度优先的算法。