在Python中子类化“对象”类的目的是什么?

问题描述 投票:0回答:6

所有 Python 内置函数都是

object
的子类,我遇到过许多用户定义的类,它们也是。为什么?上课的目的是什么
object
?这只是一个空课吧?

python object deprecated future-proof new-style-class
6个回答
63
投票

注意:新式类是 Python 3 中的默认类。在那里不需要子类化

object
。请阅读下文,了解有关 Python 2 用法的更多信息。

简而言之,它释放了魔法小马。

长期以来,Python 2.2 及更早版本使用“旧式类”。它们是类的特定实现,并且有一些限制(例如,您不能对内置类型进行子类化)。解决这个问题的方法是创建一种新的课程风格。但是,这样做会涉及一些向后不兼容的更改。因此,为了确保为旧样式类编写的代码仍然有效,创建了

object
类作为所有新样式类的超类。 因此,在 Python 2.X 中,
class Foo: pass
将创建一个旧式类,而
class Foo(object): pass
将创建一个新式类。

详细内容,请参阅 Guido 的 统一 Python 2.2 中的类型和类

而且,一般来说,养成将所有类都设为新样式的习惯是个好主意,因为有些东西(我想到的是

@property
装饰器)不适用于旧样式类。


13
投票

简短的回答:子类化

object
有效地使其成为 new-style 类(请注意,这是不必要的,因为在 Python 3.x 中是自动的)

有关

new style
类和
old style
类之间的区别:请参阅 这个 stackoverflow 问题。有关完整的故事:请参阅这篇关于 Python 类型和对象的精彩文章


4
投票

这与课程的“新式”有关。您可以在这里阅读更多相关信息:http://docs.python.org/tutorial/classes.html#multiple-inheritance,也可以在这里:http://docs.python.org/reference/datamodel.html#新古典课

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


3
投票

是的,但它将该类标记为“新式”类。新开发的类应该使用 object 基础,因为它成本很低并且可以保证您的代码面向未来。

    


1
投票
object

的子类,现在您可以做一些很酷的事情,例如定义属性,并且子类化

dict
不再是痛苦和奇怪错误的练习。

详细信息请参见Python文档的第3.3节:

新型和经典类。


0
投票
Python 2.2 引入了“新样式类”

,相对于没有子类对象的旧样式类,它具有许多附加功能。对对象进行子类化是表明您的类应该是新样式类而不是旧样式类的选择方式。

© www.soinside.com 2019 - 2024. All rights reserved.