返回介绍

新式类

发布于 2024-01-29 22:24:15 字数 1230 浏览 0 评论 0 收藏 0

在Python 2.2中,引入一种新的类,称为“新式”(new-style)类。本书这一部分至今为止所谈到的类和新的类相比时,就称为“经典”(classic)类。在Python 3.0中,类的区分已经融合了,但是对于Python 2.X的用户来说,还是有所区分的。

·对于Python 3.0来说,所有的类都是我们所谓的“新式类”,不管它们是否显式地继承自object。所有的类都继承自object,不管是显式的还是隐式的,并且,所有的对象都是object的实例。

·在Python 2.6及其以前的版本中,类必须继承自的类看做是“新式”object(或者其他的内置类型),并且获得所有新式类的特性。

由于在Python 3.0中所有的类都自动是新式类,所以新式类的特性只是常规的类特性。然而,在本节中,我选择区分开它们,以便对Python 2.X代码的用户有所区分——这些代码中的类,只有在它们派生自object的时候才具有新式类的特性。

换句话说,当Python 3.0的用户在本节中看到“新式类”的叙述,它应该将其看作是对它们的类的已有特性的说明。对于Python 2.6的读者来说,还有一组可选的扩展。

在Python 2.6及其以前的版本中,唯一的编码差异是,它们要么从一个内置类型(如list)派生,要么从一个叫做object的特殊内置类派生。如果没有其他合适的内置类型可用,内置名称object就可以作为新式类的超类提供。

通常情况下,任何从object或其他内置类型派生的类,都会自动视为新式类。只要一个内置类型位于超类树中的某个位置,新类也当做一个新式类。不是从内置类型派生出来的类,就会当作经典类来对待。

新式类只是和经典类有细微的差别,并且它们之间的区分的方式,对于大多数主要的Python用户来说,是无关紧要的。此外,经典类形式在Python 2.6中仍然可用,并且与二十年前几乎完全一样地工作。

实际上,新式类在语法和行为上几乎与经典类完全向后兼容;它们主要只是添加了一些高级的新特性。然而,由于它们修改了一些类行为,它们必须作为一种不同的工具引入,以避免影响到依赖以前的行为的任何已有代码。例如,一些细微的区别,例如钻石模式继承搜索和带有__getattr__这样的管理属性方法的内置运算,如果保持不变的话,可能会导致一些遗留代码失效。

下面两个小节针对新式类的不同以及它们所提供的新工具给出概览。再一次,由于如今所有的类都是新式类,这些主题对Python 2.X读者表示了变化,但是对Python 3.0读者来说只是额外的高级类话题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文