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