我已经使用Python很长一段时间了,我仍然不确定你为什么要从子类化object.这有什么区别:
class MyClass():
pass
Run Code Online (Sandbox Code Playgroud)
还有这个:
class MyClass(object):
pass
Run Code Online (Sandbox Code Playgroud)
据我所知,object是所有类的基类和隐含的子类.你从明确的子类化中获得了什么吗?什么是最"Pythonic"的事情?
同意@kriss,@ Nooctis和@Carson,加上我的更多颜色:
class X: pass并且class X(): pass是经典类的同义词,而
class X(object): pass对于新式类,您可以在这里看到:
>>> class X:pass
...
>>> class Y(): pass
...
>>> class Z(object): pass
...
>>>
>>> type(X), type(Y), type(Z)
(<type 'classobj'>, <type 'classobj'>, <type 'type'>)
Run Code Online (Sandbox Code Playgroud)
请查看@kriss提供的参考资料,了解差异的更多细节.Python 3中无效的是经典类的概念......原因是因为经典类已被弃用.这三个习语只在任何3.x中创建新风格的类:
>>> class X:pass
...
>>> class Y(): pass
...
>>> class Z(object): pass
...
>>>
>>> type(X), type(Y), type(Z)
(<class 'type'>, <class 'type'>, <class 'type'>)
Run Code Online (Sandbox Code Playgroud)
底线?如果您使用Python 2进行编码,请尝试尽可能使用新式类.这样,您已经内置了迁移路径,而且新风格的类提供了比经典类更多的功能.(这有点主观,但如果你的[经典]类相对简单,那么你可能不需要做任何事情来让它们在Python 3中工作.)