【问题标题】:What is the reason behind (object) term in defining a new class in python? [duplicate]在 python 中定义新类的(对象)术语背后的原因是什么? [复制]
【发布时间】:2021-10-11 18:55:27
【问题描述】:

这两种在python中定义类的方法有什么区别:

class TestClass(object):
    def __init__(self):
        pass

class TestClass:
    def __init__(self):
        pass

我不明白(object) 在定义类中的作用,我希望你能解释一下。在查看 here 类上的 python 原始文档时,我没有找到任何问题的答案。

【问题讨论】:

  • @IainShelvington。它很接近,但不是同一个问题。他们肯定相处得很好。
  • 在 Python 3 中没有区别。它是自动完成的。在 Python 2 中,派生自 object 的对象具有一些额外的功能。
  • 如果您使用的是最新(仍受支持)的 Python 版本,则没有。如果您使用的是 Python 2,请升级!
  • 感谢您的回答,我现在明白了原因,显然这是一个重复的问题。 ??????

标签: python class oop


【解决方案1】:

从python 3开始没有区别。任何没有明确指定基类的类都继承自object

符号class TestClass(object): 是完全可以接受且明确的,但对于现代代码来说是不必要的且有些不合常规。这是 python 2 的保留。

在 python 2.2 中引入新样式类时,用户必须显式继承 object 才能使用新功能。在 python 3 之前,class TestClass: 会创建一个旧式类,这确实会有所不同。在 python 2.2 之前,object 不是一个东西。

您可以在此处阅读有关符号历史的更多信息:What is the difference between old style and new style classes in Python?

【讨论】:

    【解决方案2】:

    没有区别。该语法用于定义继承,但所有类都已从 object 继承。

    section 9.5. Inheritance:

    派生类定义的语法如下所示:

    class DerivedClassName(BaseClassName):
    

    ...

    ...所有类都继承自object ...


    但是,在 Python 2 中,情况有所不同。没有(object) 的类将是老式类,而带有(object) 的类将是new-style class,具有更多功能。

    【讨论】:

      猜你喜欢
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 2021-01-26
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 2010-12-04
      • 2017-12-04
      相关资源
      最近更新 更多