# -*- coding: utf-8 -*- # 经典类或者旧试类 class A: pass a = A() # 新式类 class B(object): pass b = B() # python2不支持 # print(A.__class__) print(a.__class__) print(type(A)) print(type(a)) # python2 # __main__.A # <type 'classobj'> # <type 'instance'> # python3 # <class 'type'> # <class '__main__.A'> # <class 'type'> # <class '__main__.A'> print(B.__class__) print(b.__class__) print(type(B)) print(type(b)) # python2 # <type 'type'> # <class '__main__.B'> # <type 'type'> # <class '__main__.B'> # python3 # <class 'type'> # <class '__main__.B'> # <class 'type'> # <class '__main__.B'> # 旧式类的实现不够好,类是类,实例是实例,类的类型是classobj,实例的类型是instance,两者的联系只在于__class__, # 这和内置对象是不同的,int对象的类型就是int,同时int()返回的也是int类型的对象,内置对象和自定义对象不同就对代码统一实现带来很大困难。 # # 新式类 # # 1. 所有类的类型都是type # 2. 所有类调用的结果都是构造,返回这个类的实例 # 3. 所有类都是object的子类 # 4. 新式类不仅可以用旧类调用父类的方法,也可以用super方法。
from:https://my.oschina.net/shyl/blog/692930