旧式类的实现不够好,类是类,实例是实例,类的类型是classobj,实例的类型是instance,两者的联系只在于__class__,这和内置对象是不同的,int对象的类型就是int,同时int()返回的也是int类型的对象,内置对象和自定义对象不同就对代码统一实现带来很大困难。比如说有段代码输入一个对象,返回一个默认构造的同类型对象,本来应该写作type(obj)(),现在就必须写成:obj.__class__() if hasattr(obj, '__class__') else type(obj)()。如果想用自定义的类去替代一些系统内置类型,比如说自定义一个dictionary,这样的不一致就会出问题
新式类之后自定义类和内置类型就一致了:
1. 所有类型的类型都是type
2. 所有类型调用的结果都是构造,返回这个类型的实例
3. 所有类型都是object的子类
这样就不再需要区分自定义类和类型了。
作者:灵剑
链接:https://www.zhihu.com/question/38803693/answer/103128686
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。