本书涵盖的内容

    我们会用一些章节深入讲解Python的3个高级主题。

    • 一些预备知识,主要讲解一些基本的主题,例如unittest、doctest、docstrings以及一些特殊的函数名。

    第1部分“用特殊方法实现Python风格的类”,这个部分着重讲解面向对象编程以及如何更好地将Python内置的特性和我们的类进行集成,这个部分包括以下8章。

    • 第1章“init()方法”,详细讲解了init()的功能和实现,我们会用不同的方式初始化一些简单的对象。接着,我们会尝试初始化更加复杂的对象,例如集合和容器。
    • 第2章“与Python无缝集成——基本特殊方法”,讲解如何通过加入特殊函数来扩展一个简单的类。我们需要了解继承的默认行为,以便理解怎样的重写是必需的,以及什么时候应该使用重写。
    • 第3章“属性访问、特性和修饰符”,主要讲解了默认情况下它们是如何工作的。我们需要决定在什么时候在什么地方重写默认行为。我们还将探讨描述符的细节,以便更好地理解Python的内部工作机制。
    • 第4章“抽象基类设计的一致性”,主要关注collections.abc模块中的抽象基类。我们会探讨collections和containers的基本概念,主要关注那些常被扩展和修改的部分。类似地,我们还会探讨numbers的基本概念,主要关注那些常被实现的部分。
    • 第5章“可调用对象和上下文的使用”,主要讲述了使用contextlib提供的方法以不同的方式来创建上下文管理器。我们会讲解可调用对象的一系列不同设计以及为什么有时候一个有状态的可调用对象会比一个简单的函数更加有用。在我们定制自己的上下文管理器之前,我们还会探讨如何使用Python中内置的上下文管理器。
    • 第6章“创建容器和集合”,关注container类的基本使用。我们会探讨在创建容器过程中会调用的各种特殊函数。同时,我们也会探讨如何扩展内置容器以添加新特性。最后,我们将封装内置容器,然后通过委托方法让基础容器可以使用这些封装。
    • 第7章“创建数值类型”,涵盖了这些基本的运算符:+、−、、/、//、%和*。同时,我们也会介绍比较运算符,包括<、>、<=、>=、==和!=。最后,我们会总结一些在扩展和定制自己的数值类型时需要注意的设计要点。
    • 第8章“装饰器和mixin——横切方面”,涵盖了简单函数描述符,带参数的函数修饰符、类修饰符和方法修饰符。

    第2部分“持久化和序列化”介绍一个序列化到存储介质的持久化对象,它可能是转换为JSON后写入文件系统的,也可能是通过ORM存储到数据库的。这个部分会着重探讨持久化的不同方法,包括以下5章。

    • 第9章“序列化和保存——JSON、YAML、Pickle、CSV和XML”,涵盖了对不同数据格式做简单的持久化时可使用的现有的库,例如JSON、YAML、Pickle、XML和CSV。
    • 第10章“用Shelve保存和获取对象”,探讨了使用Python模块进行简单的数据库操作,例如Shelve和dbm。
    • 第11章“用SQLite保存和获取对象”,进入更加复杂的SQL和关系数据库的世界。因为SQL的特性并不符合面向对象设计的原则,我们会遇到“阻抗不匹配”问题。一个通用的解决方案是使用ORM存储大量的领域对象。
    • 第12章“传输和共享对象”,探讨HTTP协议以及使用JSON、YAML和XML来表示要传输的对象。
    • 第13章“配置文件和持久化”,涵盖了Python应用程序使用配置文件的不同方法。

    第3部分“测试、调试、部署和维护”,我们会展示如何收集数据来支持和调试高性能程序。其中包括创建尽可能完善的文档——减少技术支持的难度。这个部分包括最后5章。

    • 第14章“Logging和Warning模块”,探讨了如何使用logging和warning模块来记录审计和调试信息。相比于使用print()函数,这将是巨大的进步。
    • 第15章“可测试性的设计”,涵盖了如何设计可测试的程序,以及如何使用unittest和doctest。
    • 第16章“使用命令行”,探讨如何使用argparse模块解析选项和参数。接着,我们会使用命令模式来编写易于整合和扩展的程序模块,而不是使用纯粹的shell脚本。
    • 第17章“模块和包的设计”,涵盖了如何设计模块和包。这是一个更高级的主题,我们会探讨如何将相关的类组织在一个模块中,以及如何将相关的模块组合成一个包。
    • 第18章“质量和文档”,涵盖了我们应该如何将设计文档化,以便让用户相信我们的软件是可靠的,并且是以正确的方式实现的。