Python中新式类和经典类的区别,钻石继承

1)首先,写法不一样:

1 class A:
2     pass
3  
4 class B(object):

2)在多继承中,新式类采用广度优先搜索,而旧式类是采用深度优先搜索

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

 

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

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

 

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

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

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

--新式类增加了__getattribute__方法

 

 1 class A():
 2     def __init__(self):
 3         pass
 4     def save(self):
 5         print "This is from A"
 6 class B(A):
 7     def __init__(self):
 8         pass
 9 class C(A):
10     def __init__(self):
11         pass
12     def save(self):
13         print  "This is from C"
14 class D(B,C):
15     def __init__(self):
16         pass
17 fun =  D()
18 fun.save()
19 
20 经典类的答案: This is from A
21 新式类的答案: This is from C

 

钻石继承

如果子类继承自两个单独的超类,而那两个超类又继承自同一个公共基类,那么就构成了钻石继承体系。

posted @ 2018-07-25 20:08  Niuli'blog  阅读(620)  评论(0编辑  收藏  举报