python中的新式类和旧式类

三世轮回 提交于 2020-02-04 14:12:20

python中的新式类和旧式类

2018-05-15

 

python2中既有新式类又有旧式类

 


默认是经典类,只有显式继承object才是新式类

python3中只有新式类
默认是新式类,不必显式继承ojbect

新式类的MRO(method resolution order 基类搜索顺序)算法采用C3算法广度优先搜索,而旧式类的MRO算法是采用深度优先搜索

新式类相同父类只执行一次构造函数,经典类重复执行多次。

新式类都从object继承,经典类不需要

 

以下是一个例子:

class A:
pass
class B:
pass
class C(B):
pass
class D(C,A):
pass

执行顺序为:D->C->B,->A

class A(object):
pass
class B(object):
pass
class C(object):
pass
class D(A,B,C):
pass

执行顺序为: D->A->B->C->Object

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!