在Python中继承类“对象”的目的是什么?

时间:2010-04-06 21:54:50

标签: python object deprecated future-proof new-style-class

所有Python内置函数都是object的子类,我遇到了许多用户定义的类。为什么?课程object的目的是什么?这只是一个空洞的课,对吧?

6 个答案:

答案 0 :(得分:51)

简而言之,它设置了免费的神奇小马。

总之,Python 2.2及更早版本使用了“旧式类”。它们是类的特定实现,并且它们有一些限制(例如,您不能将内置类型子类化)。解决这个问题的方法是创建一种新的类。但是,这样做会涉及一些向后不兼容的变化。因此,为了确保为旧样式类编写的代码仍然有效,创建了object类作为所有新样式类的超类。 因此,在Python 2.X中,class Foo: pass将创建一个旧式类,class Foo(object): pass将创建一个新的样式类。

更长时间,请参阅Guido的Unifying types and classes in Python 2.2

而且,一般来说,养成让所有课程都成为新风格的习惯是一个好主意,因为有些事情(@property装饰者是想到的那个)将不适用于旧的式班。

答案 1 :(得分:7)

简短回答:子类化object有效地使它成为新式类(请注意,这是不必要的,因为在Python 3.x中是自动的)

有关new style类和old style类之间的区别:请参阅this stackoverflow question。完整的故事:见this nice writeup on Python Types and Objects

答案 2 :(得分:4)

它与“新式”课程有关。您可以在此处详细了解它:http://docs.python.org/tutorial/classes.html#multiple-inheritance以及此处:http://docs.python.org/reference/datamodel.html#new-style-and-classic-classes

使用新式类将允许您使用“Python的更新,多功能的功能,如__slots__,描述符,属性和__getattribute __()。”

答案 3 :(得分:3)

是的,但它将该类标记为new-style类。新开发的类应该使用object基础,因为它的代码成本很低,并且面向未来。

答案 4 :(得分:0)

简短版本是经典类,它不需要超类,具有在不破坏大量旧代码的情况下无法解决的限制。所以他们创建了从object继承子类的新式类的概念,现在你可以做一些很酷的事情,比如定义属性,子类化dict不再是痛苦和奇怪的错误。

详情请参阅Python文档的第3.3节:New-style and classic classes.

答案 5 :(得分:0)

Python 2.2 introduced "new style classes"相对于没有子类对象的旧样式类具有许多附加功能。子类对象是指示您的类应该是新样式类而不是旧样式类的选择方式。