在Python中inheritance类“对象”的目的是什么?
所有的Python内置插件都是object
子类,我也遇到了许多用户定义的类。 为什么? 类object
的目的是什么? 这只是一个空的class级,对吧?
总之,它设置了免费的魔法小马。
Python 2.2和更早的版本使用“老式类”。 它们是类的一个特定的实现,并且有一些限制(例如,你不能inheritance内置types)。 解决这个问题的方法是创build一个新的类的风格。 但是,这样做会涉及一些倒退不相容的变化。 因此,为了确保为旧风格类编写的代码仍然可以工作,创buildobject
类作为所有新风格类的超类。 因此,在Python 2.X中, class Foo: pass
将创build一个旧式类和class Foo(object): pass
将创build一个新的types风格。
在更长的时间内,请参阅Python 2.2中的 Guido 统一types和类 。
而且,一般来说,养成所有类的新风格是一个好主意,因为有些东西( @property
装饰器是一个想到的)不适用于旧式类。
这与“新式”课程有关。 您可以在这里阅读更多关于它的信息: http : //docs.python.org/tutorial/classes.html#multiple-inheritance ,也可以在这里: http : //docs.python.org/reference/datamodel.html#new-style -和经典类
使用新风格的类将允许您使用“Python的更新,多function的function,如__slots__,描述符,属性和__getattribute __()”。
对,但是它把class级标记为新式class级。 新开发的类应该使用object
库,因为它代价很小,并且可以保证将来的代码。
简短的回答:子类化object
有效地使它成为一个新风格的类(请注意,这是不必要的,因为在Python 3.x中是自动的)
对于new style
类和old style
类之间的区别:请参阅此stackoverflow问题 。 有关完整的故事:请参阅Pythontypes和对象的精彩文章 。
简短的版本是那些不需要超类的经典类,有一些限制,如果不破坏大量的旧代码,这些限制是无法解决的。 因此,他们创build了从object
inheritance的新型类的概念,现在你可以做一些很酷的事情,比如定义属性,并且子类化dict
不再是痛苦和奇怪的错误的练习。
细节在Python文档的3.3节: 新风格和经典类。
Python 2.2引入了“新风格类” ,它具有许多相对于没有子对象的旧风格类的附加特性。 子类对象是select的方式来表明你的类应该是一个新的风格类,而不是一个旧风格的类。