简介
目录
第 1章 简介、代码格式和工具 1
1.1 代码整洁的意义 2
1.2 代码整洁的重要性 2
1.2.1 代码格式化在代码整洁中的作用 3
1.2.2 在项目中遵循编码风格准则 4
1.3 文档字符串和注解 6
1.3.1 文档字符串 6
1.3.2 注解 9
1.3.3 注解是否会替代文档字符串 11
1.3.4 配置用于实施基本质量控制的工具 12
1.4 小结 16
第 2章 Python风格代码 17
2.1 索引和切片 18
2.2 上下文管理器 21
2.3 对象的属性、特性和不同类型的方法 26
2.3.1 Python中的下划线 27
2.3.2 属性 29
2.4 可迭代对象 31
2.4.1 创建可迭代对象 32
2.4.2 创建序列 34
2.5 容器对象 36
2.6 对象的动态属性 37
2.7 可调用对象 39
2.8 魔法方法概述 40
2.9 Python中的警告 41
2.9.1 可变的默认参数 41
2.9.2 扩展内置类型 42
2.10 小结 44
第3章 好代码的一般特征 45
3.1 契约式设计 46
3.1.1 前置条件 47
3.1.2 后置条件 48
3.1.3 Python的契约 48
3.1.4 设计契约:结论 49
3.2 防错性程序设计 50
3.2.1 错误处理 50
3.2.2 在Python中使用断言 57
3.3 关注点分离 58
3.4 常用缩略词 60
3.4.1 DRY和OAOO 60
3.4.2 YAGNI 62
3.4.3 KIS 63
3.4.4 EAFP和LBYL 64
3.5 组合和继承 65
3.5.1 什么时候继承是一个好的决定 66
3.5.2 反模式的继承 67
3.5.3 Python中的多重继承 69
3.6 函数和方法中的参数 72
3.6.1 Python函数的参数是如何工作的 73
3.6.2 函数中参数的数量 77
3.7 关于软件设计良好实践的结束语 80
3.7.1 软件的正交性 80
3.7.2 构建代码 82
3.8 小结 83
第4章 SOLID原则 84
4.1 单一职责原则 84
4.1.1 一个有太多职责的类 85
4.1.2 分配责任 86
4.2 打开 关闭原则 87
4.2.1 不遵循打开 关闭原则的可维护性风险的示例 88
4.2.2 重构事件系统以获得可扩展性 90
4.2.3 扩展事件系统 92
4.2.4 关于OCP的结束语 94
4.3 里氏替换原则 94
4.3.1 使用工具检测LSP问题 95
4.3.2 更微妙的LSP违规案例 97
4.3.3 关于LSP需要注意的一些点 100
4.4 接口隔离原则 100
4.4.1 提供太多信息的接口 102
4.4.2 接口越小越好 102
4.4.3 接口应该多小 103
4.5 依赖倒置原则 103
4.5.1 一个严格依赖的案例 104
4.5.2 倒置依赖 104
4.6 小结 106
第5章 用装饰器改进代码 107
5.1 Python中的装饰器是什么 107
5.1.1 装饰器函数 108
5.1.2 装饰类 109
5.1.3 其他类型的装饰器 113
5.1.4 将参数传递给装饰器 114
5.1.5 充分利用装饰器 117
5.2 有效的装饰:避免常见的错误 118
5.2.1 保存关于原始包装对象的数据 118
5.2.2 处理装饰器中的副作用 121
5.2.3 创建始终有效的装饰器 125
5.3 装饰器的DRY原则 128
5.4 装饰器和关注点分离 129
5.5 好的装饰器的相关分析 130
5.6 小结 132
第6章 用描述符从对象中获取更多信息 133
6.1 初探描述符 133
6.1.1 描述符背后的机制 133
6.1.2 研究描述符协议中的每个方法 136
6.2 描述符的类型 142
6.2.1 非数据描述符 143
6.2.2 数据描述符 145
6.3 描述符的实际应用 147
6.3.1 描述符的一种应用 147
6.3.2 实现描述符的不同形式 151
6.3.3 关于描述符的更多考虑 154
6.4 分析描述符 158
6.4.1 Python内部如何使用描述符 158
6.4.2 在装饰器中实现描述符 163
6.5 小结 164
第7章 使用生成器 165
7.1 技术要求 165
7.2 创建生成器 165
7.2.1 初探生成器 166
7.2.2 生成器表达式 168
7.3 惯用迭代 169
7.3.1 迭代的习惯用法 169
7.3.2 Python中的迭代器模式 175
7.4 协同程序 179
7.4.1 使用生成器接口的方法 179
7.4.2 更先进的协同程序 184
7.5 异步编程 191
7.6 小结 192
第8章 单元测试和重构 193
8.1 设计原则和单元测试 193
8.1.1 关于其他形式的自动化测试的说明 194
8.1.2 单元测试和敏捷软件开发 195
8.1.3 单元测试和软件设计 196
8.1.4 定义测试内容的边界 199
8.2 测试的框架和工具 200
8.2.1 用于单元测试的框架和库 200
8.2.2 代码覆盖率 209
8.2.3 模拟对象(Mock对象) 211
8.3 代码重构 216
8.3.1 代码演进 216
8.3.2 需要演进的不仅仅是生产代码 218
8.4 更多关于单元测试的信息 220
8.4.1 基于属性的测试 220
8.4.2 突变测试 221
8.5 测试驱动开发的简要介绍 223
8.6 小结 224
第9章 常见的设计模式 225
9.1 Python中设计模式的注意事项 225
9.2 有效的设计模式 227
9.2.1 创建型模式 227
9.2.2 结构型模式 233
9.2.3 行为模式 240
9.3 空对象模式 250
9.4 关于设计模式的*后想法 252
9.4.1 模式对设计的影响 252
9.4.2 模型中的名称 253
9.5 小结 254
第 10章 整洁架构 255
10.1 从整洁代码到整洁架构 255
10.1.1 关注点分离 256
10.1.2 抽象 257
10.2 软件组件 258
10.2.1 包 258
10.2.2 容器 261
10.3 用例 262
10.3.1 编码 263
10.3.2 服务 268
10.3.3 分析 271
10.4 小结 273
写在*后 274
光盘服务联系方式: 020-38250260 客服QQ:4006604884
云图客服:
用户发送的提问,这种方式就需要有位在线客服来回答用户的问题,这种 就属于对话式的,问题是这种提问是否需要用户登录才能提问