python中的新式类与旧式类

在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中都是新式类,也就是说查找继承的属性时按照广度优先的算法。

posted @ 2018-02-27 17:01  超凡-  阅读(220)  评论(0编辑  收藏  举报