新式类与经典类的区别:

首先:

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 '''
new_style class
 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 '''
classic class

相关文章:

  • 2022-02-23
  • 2022-02-11
  • 2021-12-13
  • 2022-03-09
  • 2021-08-10
  • 2021-06-21
  • 2021-07-16
  • 2021-04-11
猜你喜欢
  • 2022-12-23
  • 2021-08-27
  • 2022-01-05
  • 2022-12-23
  • 2021-11-20
  • 2021-12-02
  • 2021-12-07
相关资源
相似解决方案