类声明之间的区别

Fal*_*gel 3 python class

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

有什么区别:

class MyClass:
    pass
Run Code Online (Sandbox Code Playgroud)

class MyClass():
    pass
Run Code Online (Sandbox Code Playgroud)

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

class MyClass():
    pass

class MyClass(object):
    pass
Run Code Online (Sandbox Code Playgroud)

mgi*_*son 7

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


Mar*_*ers 5

前两个拼写没有区别.

在python 2.7中,后两者之间存在巨大差异.来自继承,object使之成为新的风格类,改变继承语义,并添加描述(支持@property,@classmethod等等).这是Python 3中的默认设置.

Python 2.2中引入了新式类来统一类型(例如intlist)和类,并且因为有些事情以向后兼容的方式发生变化,所以您需要"选择加入",明确继承object以启用更改.

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