python新式类和经典类的区别?

来源:互联网 发布:淘宝图书讲谈社 编辑:程序博客网 时间:2024/05/01 08:39
1)首先,写法不一样:
class A:    passclass B(object):    pass
2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索。

3)新式类更符合OOP编程思想,统一了python中的类型机制。

Python 2.x中默认都是经典类,只有显式继承了object才是新式类

Python 3.x中默认都是新式类,不必显式的继承object


其次:

------新式类对象可以直接通过__class__属性获取自身类型:type

------继承搜索的顺序发生了改变,经典类多继承属性搜索顺序: 先深入继承树左侧,再返回,开始找右侧;新式类多继承属性搜索顺序: 先水平搜索,然后再向上移动

------新式类增加了__slots__内置属性, 可以把实例属性的种类锁定到__slots__规定的范围之中

------新式类增加了__getattribute__方法

class A():    def __init__(self):        pass    def save(self):        print "This is from A"class B(A):    def __init__(self):        passclass C(A):    def __init__(self):        pass    def save(self):        print  "This is from C"class D(B,C):    def __init__(self):        passfun =  D()fun.save()经典类的答案: This is from A新式类的答案: This is from C