Skip to content

目录

第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封装阻塞代码
  • 案例学习
  • 练习
  • 总结

拓展阅读