在Python中,子类化"object"类的目的是什么?
所有的Python内置类型都是object
类的子类,我发现很多用户自己定义的类也是这样。为什么会这样呢?object
类的目的是什么?它不就是一个空的类吗?
6 个回答
这和“新式”类有关。你可以在这里了解更多信息:http://docs.python.org/tutorial/classes.html#multiple-inheritance,还有这里:http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes
使用新式类可以让你使用“Python更新的、多功能的特性,比如 __slots__、描述符、属性和 __getattribute__()”。
简短回答:如果你让一个类去继承 object
,那么这个类就变成了一个 新式 类(在Python 3.x中,这个步骤其实是自动完成的,所以不需要特别去做)。
关于 新式
类和 旧式
类的区别,可以参考 这个StackOverflow的问题。想了解更详细的内容,可以看看 这篇关于Python类型和对象的好文章。
注意:在Python 3中,新式类是默认的。继承object
在这里是多余的。关于Python 2的使用,下面会有更多信息。
简单来说,它释放了神奇的小马。
详细来说,Python 2.2及之前的版本使用的是“旧式类”。这是一种特定的类实现方式,有一些限制(比如,你不能继承内置类型)。为了解决这个问题,创建了一种新的类风格。但这样做会涉及一些不兼容的变化。因此,为了确保为旧式类编写的代码仍然可以运行,创建了object
类,作为所有新式类的父类。
所以,在Python 2.X中,class Foo: pass
会创建一个旧式类,而class Foo(object): pass
会创建一个新式类。
如果想了解更多,可以看看Guido的在Python 2.2中统一类型和类。
总的来说,养成使用新式类的习惯是个好主意,因为有些功能(比如@property
装饰器)在旧式类中是无法使用的。