所有的Python内置类都是
object
的子类,我也遇到过许多用户自定义的类也是如此。为什么?object
这个类的目的是什么?它只是一个空类,对吗?object
的子类,我也遇到过许多用户自定义的类也是如此。为什么?object
这个类的目的是什么?它只是一个空类,对吗?object
是不必要的。请阅读下面的更多信息以了解在Python 2中使用的方法。
简而言之,它释放了神奇的小马。
长话短说,Python 2.2及更早版本使用“旧式类”。它们是类的一个特殊实现,并且它们有一些限制(例如,您不能子类化内置类型)。修复此问题的方法是创建新样式的类。但是,这样做将涉及一些不向后兼容的更改。因此,为确保为旧样式类编写的代码仍然有效,创建了object
类以作为所有新样式类的超类。
因此,在Python 2.X中,class Foo: pass
将创建一个旧式类,class Foo(object): pass
将创建一个新样式类。
更详细地了解,请参见Guido的Unifying types and classes in Python 2.2。
总的来说,养成使所有类都成为新样式的习惯是一个好主意,因为某些东西(例如@property
装饰器)在旧样式类中不起作用。
简短回答:通过子类化 object
,可以有效地将它变成一个新式类(请注意,这在Python 3.x中是自动的,无需手动操作)
有关新式类
和旧式类
之间的区别,请参见此stackoverflow问题。如果想了解完整的故事,请查看这篇关于Python类型和对象的优秀文章。
object
子类化,现在您可以做很酷的事情,比如定义属性,而且子类化dict
不再是一种痛苦和奇怪错误的练习。