所有Python内置函数都是object
的子类,我遇到了许多用户定义的类。为什么?课程object
的目的是什么?这只是一个空洞的课,对吧?
答案 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"相对于没有子类对象的旧样式类具有许多附加功能。子类对象是指示您的类应该是新样式类而不是旧样式类的选择方式。