Python中的旧样式类和新样式类有什么区别?

发布于 2021-02-02 23:24:14

Python中的旧样式类和新样式类有什么区别?什么时候应该使用其中一个?

关注者
0
被浏览
140
1 个回答
  • 面试哥
    面试哥 2021-02-02
    为面试而生,有面试问题,就找面试哥。

    在Python 2.1之前,旧式类是用户可用的唯一样式。

    (旧式)类的概念与类型的概念无关:如果x是旧式类的实例,则x.__class__指定的类x,但type(x)始终为<type 'instance'>

    这反映了这样一个事实,即所有旧式实例(独立于其类)均使用称为实例的单个内置类型实现。

    在Python 2.2中引入了新的类,以统一classtype的概念。新型类只是用户定义的类型,不多也不少。

    如果x是新样式类的实例,则type(x)通常与x 相同x.__class__(尽管不能保证–允许新样式类实例覆盖为返回的值x.__class__)。

    引入新型类的主要动机是提供具有完整元模型的统一对象模型。

    它还具有许多直接的好处,例如能够对大多数内置类型进行子类化,或者引入了“描述符”,以启用计算属性。

    出于兼容性原因,默认情况下,类仍为旧样式。

    通过将另一个新样式类(即一种类型)指定为父类或“顶级类型”对象(如果不需要其他父类)来创建新样式类。

    新样式类的行为与旧样式类的行为不同,除了返回什么类型外,还有许多重要的细节。

    其中一些更改是新对象模型的基础,例如调用特殊方法的方式。其他是出于兼容性考虑而无法实现的“修复程序”,例如在多重继承的情况下的方法解析顺序。

    Python 3仅具有新型类。

    无论是否从中继承子类object,类都是Python 3中的新型样式。



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看