Aaron2932

导航

python中的新式类和旧式类

python中的新式类和旧式类

2018-05-15

python2

python2中既有新式类又有旧式类
默认是经典类,只有显式继承object才是新式类

class Hello(object):
    pass

python3

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

posted on 2018-05-15 17:31  Aaron2932  阅读(452)  评论(0)    收藏  举报