新式类与经典类的区别:
首先:
Python 2.x中默认都是经典类,只有显式继承了object才是新式类
Python 3.x中默认都是新式类,不必显式的继承object
即:新式类都从object继承,经典类不需要
其次:------新式类对象可以直接通过__class__属性获取自身类型:type
------继承搜索的顺序发生了改变
经典类多继承属性搜索顺序: 先深入继承树左侧,再返回,开始找右侧 —— 即 经典类深度优先
新式类多继承属性搜索顺序: 先水平搜索,然后再向上移动 —— 即 新式类广度优先
------新式类增加了__slots__内置属性, 可以把实例属性的种类锁定到__slots__规定的范围之中
------新式类增加了__getattribute__方法
------新式类相同父类只执行一次构造函数,经典类重复执行多次。
1、新式类对象可以直接通过__class__属性获取自身类型(type)
1 #-*- coding:utf-8 -*- 2 # 3 class E1(object): 4 pass 5 6 print('new_style class') 7 e1 = E1() 8 print(e1) 9 print(e1.__class__) 10 print(type(e1)) 11 12 ''' 13 new_style class 14 <__main__.E1 object at 0x7f76acfc2320> 15 <class '__main__.E1'> 16 <class '__main__.E1'> 17 18 '''
1 # -*- coding:utf-8 -*- 2 # 3 4 class E: 5 pass 6 7 e = E() 8 print('classic class') 9 print(e) 10 print(type(e)) 11 print(e.__class__) 12 13 ''' 14 classic class 15 <__main__.E instance at 0x7f31b429afc8> 16 <type 'instance'> 17 __main__.E 18 19 '''