第4章 抽象基类设计的一致性
Python 标准库为若干容器类的特性提供了抽象基类。Python 为内置的容器类(例如list
、map
和set
)提供了一致的框架。
另外,标准库也为数值类型提供了抽象基类。我们可以使用这些类来扩展Python支持的数值类型。
我们会通过collections.abc
模块来了解抽象基类的基本概念。从这里开始,我们会关注抽象基类的一些用例,它们也是以后一些章节的主题。
我们有3个设计原则:封装、扩展和创建。除了了解各种容器和集合类型以外,我们可能还要了解封装或者扩展的一般概念。类似地,我们也会关注除了数值类型外一些其他想要实现的一般概念。
我们的目标是保证我们的程序能够和Python内置的特性无缝集成。例如,我们创建一个集合,最好能够让集合也实现一个__iter__()
迭代器。一个实现了__iter__()
的集合可以与for
语句很好地集成。
4.1 抽象基类
抽象基类的核心定义在一个名为abc
的模块中。模块中包括了创建抽象基类需要的修饰符和元类型。其他的类也依赖于这些定义。
在Python 3.2版本中,集合的抽象基类定义在collections
中。但是,在Python 3.3版本中,抽象基类被分离到了一个独立的模块collections.abc
中。
我们还会介绍numbers
模块,因为它包含了数值类型的抽象基类的定义。io
模块包含了I/O的抽象基类。
我们主要基于Python 3.3版本讨论。Python 3.3版本中的定义对Python 3.2版本也同样适用,只是由于库的结构有一些变化,需要稍微修改一下import
语句。
一个抽象基类具有以下特性。
- 抽象意味着这些类中不包括我们需要的所有方法的定义。为了让它成为一个真正有用的子类,我们需要提供一些方法定义。 ...
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.