【问题标题】:Creating object in Python [duplicate]在 Python 中创建对象 [重复]
【发布时间】:2025-11-24 15:40:02
【问题描述】:

这些在声明对象方面有什么区别吗?

class MyStuff(object):

def __init__(self):
    self.tangerine = "And now a thousand years between"

class MyStuff:

def __init__(self):
    self.tangerine = "And now a thousand years between"

【问题讨论】:

  • 阅读数据模型文档,特别是 init 方法在这里是相关的:docs.python.org/2/reference/datamodel.html#object.__init__
  • 如果您使用的是 Python 3.x,则没有区别,因为它只有新样式的类...如果您使用的是 Python 2.x,那么第一个示例会产生一个新的-style 类,第二个是 old-style 类......就是这样

标签: python


【解决方案1】:

是的,有区别。至少,Python 2 有所不同。

class MyStuff: 创建一个老式类,

class MyStuff(object): 创建一个新样式的类。

在 Python 3 中,所有类都是新样式的。

来自https://docs.python.org/2/reference/datamodel.html#new-style-and-classic-classes

类和实例有两种风格:旧式(或经典)和 新风格。

在 Python 2.1 之前,类的概念与类的概念无关 type 和 old-style classes 是唯一可用的风格。为 旧式类,声明x.__class__提供x的类, 但type(x) 始终是<type 'instance'>。这反映了一个事实,即 所有旧式实例,独立于它们的类,都被实现 使用单个内置类型,称为实例。

Python 2.2 中引入了新样式类以统一概念 类别和类型。新式类只是用户定义的类型,不 更多,不少于。如果x 是一个新式类的实例,那么type(x) 通常与x.__class__ 相同(尽管不能保证 – 允许新样式的类实例覆盖该值 返回x.__class__)。

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

出于兼容性原因,默认情况下类仍然是旧样式。 新式类是通过指定另一个新式类来创建的 (即类型)作为父类,或者“*类型”对象,如果没有 需要其他父母。新型类的行为不同 从旧式类中的一些重要细节中 除了 type() 返回的内容。其中一些变化是根本性的 到新的对象模型,就像调用特殊方法的方式一样。 其他是以前无法实施的“修复” 兼容性问题,例如在以下情况下的方法解析顺序 多重继承。

虽然本手册旨在全面介绍 Python 的 职业机制,到时候可能还是有些地方欠缺 以涵盖新式课程。请参见 https://www.python.org/doc/newstyle/ 其他来源 信息。

Python 3 中删除了旧式类,只保留了新式 类。

【讨论】: