【python】新式类与经典类(旧式类)的区别

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

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

       新式类跟经典类的差别主要是以下几点:

(1) 类和类型合并。类就是类型,类型就是类。

[python]  view plain  copy
  1. # -*- coding:utf-8 -*-    
  2.   
  3. class E:    
  4. #经典类  
  5.     pass  
  6.       
  7. class E1(object):    
  8. #新式类  
  9.     pass  
  10.        
  11. e = E()  
  12. print "经典类"  
  13. print e  
  14. print type(e)  
  15. print e.__class__  
  16.   
  17. print "新式类"  
  18. e1 = E1()  
  19. print e1  
  20. print e1.__class__  
  21. print type(e1)  
[python]  view plain  copy
  1. 经典类  
  2. <__main__.E instance at 0x0000000002250B08>  
  3. <type 'instance'>  
  4. __main__.E  
  5.   
  6. 新式类  
  7. <__main__.E1 object at 0x0000000002248710>  
  8. <class '__main__.E1'>  
  9. <class '__main__.E1'>  

我使用的是python 2.7。

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

Python2.x中:

[python]  view plain  copy
  1. class A:  
  2.     pass  
  3. class B:  
  4.     pass  
  5. class C(B):  
  6.     pass  
  7. class D(C,A):  
  8.     pass  
执行顺序为: D->C->B,->A

[python]  view plain  copy
  1. class A(object):  
  2.     pass  
  3. class B(object):  
  4.     pass  
  5. class C(object):   
  6.     pass  
  7. class D(A,B,C):   
  8.     pass  
执行顺序为:  D->A->B->C->Object

(3)新增了一些内置函数和内置属性。比如__slot()__,__getattribute__。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值