2022年 11月 4日

python 类名_类名与类名(对象)

在Python2.x中,当您从“object”继承时,类是一个“新样式”类——它是在Python2.2中实现的(大约在2001年左右)——不从“object”继承的情况会创建一个“旧样式”类,实际上维护它只是为了向后兼容。

“新样式”类的最大好处是跨Python统一类型——在此之前,人们无法正确地对内置类型(如int、list、dict)进行子类化。还指定了一个“描述符协议”,该协议描述了一个用于检索和设置对象中属性的协议,为该语言提供了很大的灵活性。(当在类中使用Python“属性”时,它更加可见)。

真正有区别的不是“从对象继承”,而是,由于Python中的类也是对象,这确实改变了类的类本身(类的类被称为其“元类”)。因此,如果将元类设置为“type”,则不需要从对象继承就可以拥有新的样式类。

强烈建议在Python2.x中,所有类都是新样式的——使用旧样式的类可能适用于某些简单的情况,但当您尝试使用属性、pickle、描述符和其他高级功能时,它们可能会产生许多微妙的、难以发现的错误。最重要的是,当您试图检查一个对象的“类型”时,对于来自旧样式类的所有对象(即使它们来自不同的用户定义类),它将是相同的(类型“实例”)。

在Python3.x版本中,所有类都是新样式的—不需要设置元类。

Python的文档“datamodel”是“法律之书”,其中

类类型定义得很详细(足以让人重新实现该语言):

这篇来自Guido的博客文章用更轻松的语言讲述了新风格类背后的动机: