.11.2静态函数的初始化24
1.12更多的__init__()技术24
1.12.1带有类型验证的初始化26
1.12.2初始化、封装和私有化28
1.13总结29
第2章与Python无缝集成——基本特殊方法30
2.1__repr__()和__str__()方法30
2.1.1非集合对象的__str__()和__repr__()31
2.1.2集合中的__str__()和__repr__()32
2.2__format__()方法33
2.2.1内嵌格式规范34
2.2.2集合和委托格式规范35
2.3__hash__()方法35
2.3.1决定哈希的对象36
2.3.2有关不可变对象和继承的默认行为37
2.3.3重载不可变对象39
2.3.4重载可变对象40
2.3.5从可变的Hand类中生成一个不可变的Hand类41
2.4__bool__()方法43
2.5__bytes__()方法44
2.6比较运算符方法45
2.6.1设计比较运算47
2.6.2实现同一个类的对象比较48
2.6.3实现不同类的对象比较49
2.6.4硬总和、软总和及多态50
2.6.5不同类比较的例子51
2.7__del__()方法53
2.7.1引用计数和对象销毁54
2.7.2循环引用和垃圾回收55
2.7.3循环引用和weakref模块56
2.7.4__del__()和close()方法58
2.8__new__()方法和不可变对象58
2.9__new__()方法和元类型59
2.9.1元类型示例1——有序的属性60
2.9.2元类型示例2——自引用61
2.10总结64
第3章属性访问、特性和修饰符66
3.1属性的基本操作66
3.2创建特性68
3.2.1主动计算特性70
3.2.2setter和deleter特性71
3.3使用特殊方法完成属性访问72
3.3.1使用__slots__创建不可变对象73
3.3.2使用tuple子类创建不可变对象74
3.3.3主动计算的属性75
3.4__getattribute__()方法77
3.5创建修饰符78
3.5.1使用非数据修饰符80
3.5.2使用数据修饰符81
3.6总结、设计要素和折中方案83
3.6.1特性与属性对比83
3.6.2修饰符的设计84
3.6.3展望84
第4章抽象基类设计的一致性85
4.1抽象基类85
4.2基类和多态87
4.3可调用对象88
4.4容器和集合88
4.5数值类型89
4.6其他的一些抽象基类90
4.6.1迭代器的抽象基类90
4.6.2上下文和上下文管理器91
4.7abc模块92
4.8总结、设计要素和折中方案93
第5章可调用对象和上下文的使用95
5.1使用ABC可调用对象来进行设计95
5.2提高性能97
5.3使用functools完成记忆化99
5.4可调用API和复杂性100
5.5管理上下文和with语句102
5.5.1使用小数上下文103
5.5.2其他上下文104
5.6定义__enter__()和__exit__()方法104
5.7上下文管理器工厂105
5.8总结107
5.8.1可调用对象的设计要素和折中方案108
5.8.2上下文管理器的设计要素和折中方案108
5.8.3展望109
第6章创建容器和集合110
6.1集合的抽象基类110
6.2特殊方法示例111
6.3使用标准库的扩展112
6.3.1namedtuple()函数112
6.3.2deque类114
6.3.3使用ChainMap115
6.3.4OrderedDict集合116
6.3.5defaultdict子类118
6.3.6counter集合119
6.4创建新集合120
6.5定义一种新的序列121
6.5.1一个用于统计的list122
6.5.2主动计算和延迟计算122
6.5.3使用__getitem__()、__setitem__()、__delitem__()和slice操作125
6.5.4实现__getitem__()、__setitem__()和__delitem__()126
6.5.5封装list和委托127
6.5.6用__iter__()创建迭代器129
6.6创建一种新的映射129
6.7创建一种新的集合131
6.7.1一些设计原则132
6.7.2定义Tree类132
6.7.3定义TreeNode类133
6.7.4演示二叉树集合136
6.8总结136
6.8.1设计要素和折中方案137
6.8.2展望138
第7章创建数值类型139
7.1numbers的抽象基类139
7.1.1决定使用哪种类型141
7.1.2方法解析和运算符映射141
7.2算术运算符的特殊方法142
7.3创建一个数字类144
7.3.1FixedPoint的初始化144
7.3.2定义固定小数点位数的二进制算术运算符146
7.3.3定义FixedPoint一元算术运算符148
7.3.4实现FixedPoint反向运算符148
7.3.5实现FixedPoint比较运算符150
7.4计算一个数字的哈希值152
7.5实现其他的特殊方法153
7.6原地运算符的优化154
7.7总结155
7.7.1设计要素和折中方案155
7.7.2展望155
……
第8章装饰器和mixin——横切方面156
第2部分持久化和序列化175
第9章序列化和保存——JSON、YAML、Pickle、CSV和XML178
第10章用Shelve保存和获取对象214
第11章用SQLite保存和获取对象235
第12章传输和共享对象263
第13章配置文件和持久化
第3部分测试、调试、部署和维护
第14章Logging和Warning模块
第15章可测试性的设计
第16章使用命令行
第17章模块和包的设计
第18章质量和文档