目录¶
第1章 面向对象设计¶
Abstract
在现实中,分析、编程与设计是相互重叠、组合、交织在一起的。本章话题如下:
- 面向对象意味着什么。
- 面向对象设计与面向对象编程之间的差异。
- 面向对象设计的基本原则。
- 基本的统一建模语言(UML)以及在什么情况下它不是那么“邪恶”。
- 面向对象
- 对象和类
- 指定属性和行为
- 数据描述对象
- 行为就是动作
- 隐藏细节并创建公共接口
- 组合
- 继承
- 继承提供抽象
- 多重继承
- 案例学习
- 练习
- 总结
第2章 Python对象¶
Abstract
本章主要关注如何利用 Python 语法来创建面向对象软件。要点如下:
- 如何在 Python 中创建类和继承对象。
- 如何为 Python 对象添加属性和行为。
- 如何将类组织成包和模块。
- 如何建议人们不要乱动我们的数据。
- 创建Python类
- 添加属性
- 让它做点什么
- 初始化对象
- 自我解释
- 模块和包
- 组织模块
- 组织模块内容
- 谁可以访问我的数据
- 第三方库
- 案例学习
- 练习
- 总结
第3章 对象相似时¶
Abstract
我们不应该在不同的地方写多份相同或相似的代码。有很多合并功能相似的代码或对象的方法。本章主要讨论最著名的面向对象准则:继承。 继承让我们能够创建两个或多个类之间的“是一个”关系,将共有的逻辑抽象到超类并在子类中控制具体的细节。本章涉及如下 Python 语法和准则:
- 基本的继承。
- 从内置类继承。
- 多重继承。
- 多态与鸭子类型。
- 基本的继承
- 扩展内置对象
- 重写和super
- 多重继承
- 钻石型继承问题
- 不同集合的参数
- 多态
- 抽象基类
- 使用抽象基类
- 创建抽象基类
- 魔术揭秘
- 案例学习
- 练习
- 总结
第4章 异常捕获¶
Abstract
本章主要讲解异常(exception), 特殊的错误对象,只有在合理的时候才需要处理。本章要点如下:
- 如何找到异常出现的原因。
- 遇到异常时如何恢复。
- 如何以不同的方式处理不同的异常。
- 遇到异常时如何清理。
- 创建新的异常类型。
- 在控制流中使用异常语法。
- 抛出异常
- 抛出一个异常
- 异常的作用
- 处理异常
- 异常的层级
- 定义我们自己的异常
- 案例学习
- 练习
- 总结
第5章 何时使用面向对象编程¶
Abstract
本章主要讨论——具体如何及何时,在实践中使用面向对象的准则和语法,以及如下要点:
- 如何识别对象。
- 再一次讨论数据和行为。
- 用属性将数据包裹在行为中。
- 用行为约束数据。
- 不要重复你自己的准则。
- 找出重复代码。
- 将对象看作对象
- 通过属性向类数据添加行为
- 属性的细节
- 装饰器——另一种创建属性的方法
- 决定何时使用属性
- 管理员对象
- 移除重复代码
- 实践
- 案例学习
- 练习
- 总结
第6章 Python数据结构¶
Abstract
本章主要讨论一些 Python 内置数据结构的面向对象特征,什么时候应该用它们,而不是一般的类,什么时候不应该用。具体要点如下:
- 元组和命名元组。
- 字典。
- 列表与集合。
- 如何以及为何扩展内置对象。
- 3 种类型的队列。
- 空对象
- 元组和命名元组
- 命名元组
- 字典
- 字典用例
- 使用defaultdict
- 列表
- 列表排序
- 集合
- 扩展内置类型
- 队列
- FIFO队列
- LIFO队列
- 优先级队列
- 案例学习
- 练习
- 总结
第7章 Python面向对象的捷径¶
Abstract
本章主要了解 Python 的各种不那么严格面向对象的特征,包括如下要点:
- 内置函数通过一次调用完成常规任务。
- 文件 I/O 与上下文管理器。
- 方法重载的替代方案。
- 函数也是对象。
- Python内置函数
- len()函数
- 反转函数
- 枚举
- 文件I/O
- 放在上下文管理器中
- 方法重载的另一种方式
- 默认参数
- 变量参数列表
- 参数解包
- 函数也是对象
- 将函数作为属性
- 可调用对象
- 案例学习
- 练习
- 总结
第8章 字符串与序列化¶
Abstract
本章深入探讨下 Python 中最常见的对象:字符串。并学习按照模式搜索字符串以及序列化数据用于存储或传输。要点如下:
- 字符串、字节以及字节数组之间的关系。
- 字符串格式化的输入和输出。
- 序列化数据的几种方式。
- 神秘的正则表达式。
- 字符串
- 字符串操作
- 字符串格式化
- 字符串是Unicode
- 可变字节字符串
- 正则表达式
- 匹配模式
- 从正则表达式中获取信息
- 序列化对象
- 自定义序列化
- 序列化Web对象
- 案例学习
- 练习
- 总结
第9章 迭代器模式¶
Abstract
本章主要学习常见的迭代器模式,以及其如何被抽象进 Python 语言的语法,要点如下:
- 什么是设计模式。
- 迭代器协议——最有力的设计模式之一。
- 列表、集合和字典推导。
- 生成器与协程。
- 设计模式简介
- 迭代器
- 迭代器协议
- 推导
- 列表推导
- 集合与字典推导
- 生成器表达式
- 生成器
- 从另一个可迭代对象中产生
- 协程
- 回到日志解析
- 关闭协程并抛出异常
- 协程、生成器与函数的关系
- 案例学习
- 练习
- 总结
第10章 Python设计模式I¶
Abstract
本章主要讲解其他常见模式,以及如何使用 Python 实现。和迭代一样,Python 通常会提供可选的语法让这些问题变得简单。要点如下:
- 许多特定的模式。
- 每种模式的Python 权威实现。
- 用 Python 语法替代特定的模式。
- 装饰器模式
- 装饰器的例子
- Python中的装饰器
- 观察者模式
- 观察者模式的例子
- 策略模式
- 策略模式的例子
- Python中的策略
- 状态模式
- 状态模式的例子
- 状态与策略
- 状态转换作为协程
- 单例模式
- 单例模式的实现
- 模板模式
- 模板模式的例子
- 练习
- 总结
第11章 Python设计模式II¶
Abstract
本章介绍另外几种设计模式,包括权威案例及常用的 Python 实现,要点如下:
- 适配器模式;
- 门面模式;
- 延迟初始化和享元模式;
- 命令模式;
- 抽象工厂模式;
- 复合模式。
- 适配器模式
- 门面模式
- 享元模式
- 命令模式
- 抽象工厂模式
- 复合模式
- 练习
- 总结
第12章 测试面向对象程序¶
Abstract
本章主要设计软件开发中的测试部分,要点如下:
- 单元测试和测试驱动开发的重要性。
- 标准 unittest 模块。
- py.test 自动测试工具。
- mock 模块。
- 代码覆盖率。
- 利用 tox 进行跨平台测试。
- 为什么要测试
- 测试驱动开发
- 单元测试
- 断言方法
- 减少模板代码并进行清理
- 组织和运行测试
- 忽略失败的测试
- 用py.test进行测试
- 一种完成设置和清理的方式
- 一种完全不同的设置变量的方式
- 在py.test中跳过测试
- 模拟昂贵的对象
- 多少测试才足够
- 案例学习
- 实现它
- 练习
- 总结
第13章 并发¶
Abstract
并发本质上并非面向对象的主题,但是 Python 的并发系统是构建于面向对象结构之上的,本章要点如下:
- 线程。
- 多进程。
- Future。
- AsyncIO。
并发很复杂。虽然其基本概念很简单,但出现错误却很难追踪。 然而,对于很多项目来说,并发是达到我们所需性能的唯一途径。本章主要涉及 Python 中基本的并发,以及一些需要避开的常见陷阱。
- 线程
- 线程的诸多问题
- 线程的超常开支
- 多进程
- 多进程池
- 队列
- 多进程的问题
- Future对象
- AsyncIO
- AsyncIO实践
- 读取AsyncIO中的Future对象
- 在网络编程中使用AsyncIO
- 用executor封装阻塞代码
- 流
- 案例学习
- 练习
- 总结