第 32 章 高级课堂专题 高级班主题
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
本章将介绍一些与类相关的高级主题,从而结束我们对 Python 中 OOP 的学习:我们将考察内置类型的子类化、"新风格 "类的变化和扩展、静态方法和类方法、槽和属性、函数和类装饰器、MRO 和super 调用等。
正如我们所看到的,Python 的 OOP 模型的核心是相对简单的,本章中介绍的一些主题是如此高级和可选,以至于您在 Python 应用程序编程生涯中可能不会经常遇到它们。不过,为了完整起见,也因为你永远不知道什么时候会在你使用的代码中出现 "高级 "主题,我们将在讨论类的最后简要介绍这些用于 OOP 工作的高级工具。
与往常一样,由于这是本书这一部分的最后一章,因此在这一章的最后,我们将讨论与课堂相关的 "疑难问题",以及这一部分的实验练习。我鼓励大家完成这些练习,以帮助巩固我们在这里所学到的知识。我还建议,作为本书的补充,您可以参与或学习更大型的 OOP Python 项目。就像计算机领域的许多事情一样,OOP 的好处往往会在实践中变得更加明显。
备注
内容说明本章收集了一些高级类主题,但有些主题过于庞大,本章无法很好地涵盖。 属性、描述符、装饰器和元类等主题在此只是简单提及,在本书的最后一部分,即例外之后,会有更全面的论述。请务必继续关注更完整的示例以及本章所涉及的某些主题的扩展内容。
你还会注意到,这一章是本书中篇幅最大的一章,我假定有勇气学习本章主题的读者已经准备好卷起袖子,深入探讨本章的内容。如果你不是在寻找高级的 OOP 主题,你可以跳到本章末的材料,当你在未来的编程代码中遇到这些工具时,再回到这里来。
扩展内置类型
除了实现 新的对象类型,类有时还用来扩展 Python 内置类型的功能,以支持更奇特的数据结构。例如,为了给列表添加队列插入和删除方法,您可以编写一些类来包装(嵌入)一个列表对象,并输出专门处理列表的插入和删除方法,就像我们在第 31 章 学习的委托技术一样。从 Python 2.2 开始,您还可以使用继承来特化内置类型。接下来的两节将展示这两种技术的实际应用。
通过嵌入扩展类型
还记得我们在第 16 章和第 18 章中写的那些集合函数吗?下面是它们作为 Python 类重获新生的样子。下面的示例(文件setwrapper.py)通过将一些集合函数移到方法中并添加一些基本的运算符重载,实现了一种新的集合对象类型。在大多数情况下,这个类只是用额外的集合操作包装了一个 Python list。但因为它是一个类,所以还支持多个实例,并可通过子类中的继承进行自定义。与先前的函数不同,在这里使用类可以让我们创建多个自足的、具有预设数据和行为的集合对象,而不是手动将列表传递到函数中:
class Set: def __init__(self, value = []):# Constructorself.data = []# Manages a listself.concat(value) def intersect(self, other):# other is any sequenceres = []# self is the subjectfor x in self.data: if x in other:# Pick common itemsres.append(x) return Set(res)# Return a new Setdef union(self, ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access