第6章 创建容器和集合

我们可以通过扩展不同的抽象基类的方式来创建新的集合。抽象基类为我们提供了扩展内置容器的基本准则。这让我们可以修改现有的属性或者重新定义更加符合我们需求的新数据结构。

我们会介绍容器的抽象基类的基本知识。Python使用了很多抽象基类来组合内置类型,例如listtupledictsetfrozenset

我们会重温各种与创建容器相关或者为容器提供了不同功能的特殊方法。我们会将这些方法单独归类为核心容器方法,与一些用于sequencemapset的特殊方法区分开。

我们会着重介绍如何通过扩展容器的方式往容器类中添加新的属性。我们还会介绍如何封装内置容器并将方法的行为从封装类委托给基础容器。

最后,我们会介绍如何创建全新的容器。这是很有挑战的一个部分,因为Python标准库中已经内置了许多非常有用而且功能强大的集合算法。为了避免涉及过深的计算机科学知识,我们会创建一个非常简陋的集合。开始在真实的应用中创建我们自己的容器之前,很有必要认真地学习Cormen、Leiserson、Rivest和Stein所著的Introduction to Algorithms

在结束本章之前,我们会总结一些在扩展或者创建新的集合时需要考虑的设计要素。

collections.abc模块提供了很多抽象基类,这些类将集合分解成许多互相独立的属性集。

即使不深入地考虑不同的属性以及它们和set类以及dict类的关系,我们仍然可以顺利地使用list类。但是,一旦我们开始探究这些抽象基类,就会发现这些类有一些微妙之处。由于将集合的不同概念独立地分解出来,即使在不同的数据结构之间,我们也可以看到一些重复的地方,但却都声称自己是优雅的多态实现。

在这些基类的最后是一些“只会一招的小马”(one-trick ...

Get Python面向对象编程指南 now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.