类声明之间的区别

时间:2013-02-12 14:50:14

标签: python class

我看到一些关于这个话题的类似问题,但我希望确定,所以我在问......

有什么区别:

class MyClass:
    pass

class MyClass():
    pass

此外,这两者之间是否存在差异:

class MyClass():
    pass

class MyClass(object):
    pass

3 个答案:

答案 0 :(得分:7)

class MyClassclass MyClass()之间没有区别。第二个问题取决于你的python版本。在python3.x上,没有区别 - 在python2.x上,后者(你从object继承)创建了一个new-style class而不是一个旧式的类。在python3.x中,所有类都是新式的。现在,新的样式类是首选 - 因此,我始终确保我的类继承自object。

答案 1 :(得分:5)

前两个拼写之间没有区别。

在python 2.7中,后两者之间存在巨大的差异。继承自object使其成为new-style class,更改继承语义并添加对描述符(@property@classmethod等)的支持。这是Python 3中的默认设置。

在Python 2.2中引入了新式类来统一类型(例如intlist)和类,并且因为有些东西以向后不兼容的方式发生变化,所以你需要'选择in',明确继承自object以启用更改。

在Python 3中,不再需要从object继承,类总是新式的。

答案 2 :(得分:3)

类型class MyClass(object)的类声明在Python 2.x上是New Style classes

Guido写了关于History of Python

中新课程的一些想法