【问题标题】:type of class in pythonpython中的类类型
【发布时间】:2011-04-22 14:46:45
【问题描述】:

如果我这样做:

class C(): pass
type(C())

我得到了:<type 'instance'>,但如果我得到了:

class C(object): pass
type(c())

我得到了:<class '__main__.c'> ?

第一个不是很人性化

【问题讨论】:

  • 你想拥有什么?什么没用?不一样吗?

标签: python class types new-style-class


【解决方案1】:

查看旧式和新式类之间的区别。前者是默认的,后者是从对象显式继承的。

所有旧式对象都是使用内置类型实例实现的。它们仍然是默认值并且它们的类型仍然是“实例”这一事实是追溯兼容性预防措施的结果。

这是从 Python 文档 (http://docs.python.org/reference/datamodel.html) 中提取的

3.3。新式和经典类 类和实例分为两种 口味:老式(或经典)和 新风格。

直到 Python 2.1,旧式类 是唯一可用的味道 用户。 (旧式)类的概念 与类型的概念无关: 如果 x 是旧式的实例 类,然后 x.class 指定 x 的类,但 type(x) 总是 .这反映了 事实上,所有旧式实例, 独立于他们的阶级,是 用单个内置实现 类型,称为实例。

新式类被引入 Python 2.2 统一类和类型。 一个新式的课堂既不存在也不存在 小于用户定义的类型。如果 x 是 一个新式类的实例,然后 type(x) 通常与 x> .class(虽然这不是 保证 - 一种新型的类 允许实例覆盖 x.class) 的返回值。

引入的主要动机 新型类是提供一个 具有完整的统一对象模型 元模型。它也有许多 实际的好处,比如能力 对大多数内置类型进行子类化,或 引入“描述符”, 启用计算属性。

出于兼容性原因,类是 默认情况下仍然是旧样式。新风格 类是通过指定创建的 另一个新式类(即一个类型) 作为父类,或“顶级 如果没有其他父对象,则键入“对象 需要。新式行为 类与旧式的不同 一些重要的课程 除了什么类型()之外的详细信息 返回。其中一些变化是 新对象模型的基础, 就像特殊方法的方式一样 调用。其他是“修复”,可以 之前未实施 兼容性问题,例如 方法解析顺序 多重继承。

虽然本手册旨在提供 全面覆盖 Python 的 类机制,它可能仍然是 在某些方面缺乏 它涵盖了新式课程。 请参见 http://www.python.org/doc/newstyle/ 获取更多信息来源。

旧式类在 Python 3.0,只留下语义 of new-style classes.of new-style classes.

【讨论】:

  • 您需要编辑您的答案并将所有“x.__class__”更改为“`x.__class__`
猜你喜欢
  • 2018-01-21
  • 2016-06-27
  • 2011-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-17
  • 2018-07-01
相关资源
最近更新 更多