class foo、class foo()和class foo(object)之间的区别是什么?

13
我注意到可以使用3种形式的类定义:class fooclass foo()class foo(object),但是我不确定它们之间有什么区别,特别是在属性方面,这个问题是关于Python 3的。

这三个在这里都是一样的。 - Willem Van Onsem
在Python 2上,前两种形式会出现问题。在Python 3上,它们是相同的(除非你对“object”做了一些愚蠢的事情)。 - user2357112
1个回答

25

我们来分析一下:

  1. class foo:

    • Python 3: 这通常是常用的方法。默认情况下,Python会将object添加为基类。
    • Python 2: 它创建一个旧的样式classobj,这可能会给你带来各种麻烦。
  2. class foo():

    • Python 3Python 2: 对于两个版本的Python来说,都与class foo相似,删除括号,这看起来很丑并且没有区别。
  3. class foo(object):
    • Python 3Python 2: 在两个Python版本中,它会生成一个新风格的class对象,具有大多数人所知道的所有好处。通常在编写可能在Python 2中使用的代码时使用此形式,显式地从object继承会导致Python 2中的新风格类,而在3中不会有任何区别(除了一些额外的输入)。

还可以参见我在一个重复问题上的回答,其中包含一些(我认为)上述内容的说明性示例。 - Engineero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接