108
案例学习112
练习122
总结123
第5章何时使用面向对象编程124
将对象看作对象124
通过属性向类数据添加行为128
属性的细节131
装饰器——另一种创建属性的方法133
决定何时使用属性134
管理员对象136
移除重复代码139
实践141
案例学习144
练习152
总结153
第6章Python数据结构154
空对象154
元组和命名元组155
命名元组157
字典159
字典用例162
使用defaultdict163
列表166
列表排序168
集合171
扩展内置类型175
队列180
FIFO队列181
LIFO队列183
优先级队列184
案例学习186
练习193
总结194
第7章Python面向对象的捷径195
Python内置函数195
len()函数195
反转函数196
枚举198
文件I/O199
放在上下文管理器中201
方法重载的另一种方式203
默认参数204
变量参数列表206
参数解包209
函数也是对象210
将函数作为属性215
可调用对象216
案例学习217
练习224
总结225
第8章字符串与序列化226
字符串226
字符串操作227
字符串格式化229
字符串是Unicode236
可变字节字符串240
正则表达式241
匹配模式242
从正则表达式中获取信息246
序列化对象249
自定义序列化251
序列化Web对象253
案例学习256
练习262
总结263
第9章迭代器模式265
设计模式简介265
迭代器266
迭代器协议266
推导269
列表推导269
集合与字典推导271
生成器表达式272
生成器274
从另一个可迭代对象中产生277
协程279
回到日志解析282
关闭协程并抛出异常285
协程、生成器与函数的关系285
案例学习286
练习293
总结294
第10章Python设计模式I295
装饰器模式295
装饰器的例子296
Python中的装饰器299
观察者模式301
观察者模式的例子302
策略模式304
策略模式的例子305
Python中的策略307
状态模式307
状态模式的例子308
状态与策略314
状态转换作为协程314
单例模式315
单例模式的实现315
模板模式319
模板模式的例子319
练习323
总结324
第11章Python设计模式II325
适配器模式325
门面模式328
享元模式331
命令模式335
抽象工厂模式340
复合模式344
练习349
总结350
第12章测试面向对象程序351
为什么要测试351
测试驱动开发353
单元测试354
断言方法355
减少模板代码并进行清理357
组织和运行测试359
忽略失败的测试359
用py.test进行测试361
一种完成设置和清理的方式363
一种完全不同的设置变量的方式366
在py.test中跳过测试370
模拟昂贵的对象371
多少测试才足够375
案例学习378
实现它379
练习384
总结385
第13章并发386
线程386
线程的诸多问题390
线程的超常开支391
多进程392
多进程池394
队列396
多进程的问题398
Future对象398
AsyncIO401
AsyncIO实践402
读取AsyncIO中的Future对象403
在网络编程中使用AsyncIO404
用executor封装阻塞代码407
流409
案例学习410
练习416
总结417