.5 调用对象的方法23
2.3.6 从相同类创建多个实例24
2.3.7 Python数据类型被实现为类25
2.3.8 对象的定义26
2.4 创建一个更加复杂的类26
2.5 将一个更加复杂的物理对象表示为类28
2.5.1 向方法传递实参32
2.5.2 多个实例33
2.5.3 初始化参数34
2.6 类的使用35
2.7 以OOP作为解决方案35
2.8 小结36
第3章 对象的思维模型和“self”的意义37
3.1 重看DimmerSwitch类37
3.2 1号高级思维模型38
3.3 2号深层模型39
3.4 self的含义41
3.5 小结43
第4章 管理多个对象44
4.1 银行账户类44
4.2 导入类的代码46
4.3 创建一些测试代码47
4.3.1 创建多个账户47
4.3.2 在列表中包含多个Account对象49
4.3.3 具有唯一标识符的多个对象51
4.3.4 创建一个交互式菜单53
4.4 创建对象管理器54
4.4.1 创建对象管理器56
4.4.2 创建对象管理器的主代码58
4.5 使用异常更好地处理错误59
4.5.1 try和except60
4.5.2 raise语句和自定义异常60
4.6 在Bank程序中使用异常61
4.6.1 使用异常的Account类61
4.6.2 优化后的Bank类63
4.6.3 处理异常的主代码64
4.7 在对象列表上调用相同的方法65
4.8 接口与实现67
4.9 小结67
第二部分 使用pygame创建图形
用户界面
第5章 pygame简介70
5.1 安装pygame70
5.2 窗口71
5.2.1 窗口坐标系统71
5.2.2 像素颜色74
5.3 事件驱动的程序75
5.4 使用pygame76
5.4.1 打开一个空白窗口76
5.4.2 绘制图片79
5.4.3 检测鼠标单击81
5.4.4 处理键盘操作83
5.4.5 创建基于位置的动画86
5.4.6 使用pygame矩形88
5.5 播放声音90
5.5.1 播放音效90
5.5.2 播放背景音乐91
5.6 绘制形状92
5.7 小结95
第6章 面向对象的pygame96
6.1 使用OOPpygame创建屏保球96
6.1.1 创建Ball类96
6.1.2 使用Ball类98
6.1.3 创建多个Ball对象99
6.1.4 创建大量Ball对象100
6.2 构建可重用的、面向对象的按钮101
6.2.1 构建一个Button类101
6.2.2 使用SimpleButton的主代码103
6.2.3 创建包含多个按钮的程序104
6.3 构建可重用的、面向对象的文本显示105
6.3.1 显示文本的步骤105
6.3.2 创建SimpleText类106
6.4 包含SimpleText和SimpleButton的弹球示例107
6.5 对比接口与实现109
6.6 回调函数109
6.6.1 创建回调函数110
6.6.2 对SimpleButton使用回调函数110
6.7 小结112
第7章 pygameGUI小部件113
7.1 向函数或方法传递实参113
7.1.1 位置和关键字形参114
7.1.2 关于关键字形参的一些说明115
7.1.3 使用None作为默认值115
7.1.4 选择关键字和默认值116
7.1.5 GUI小部件中的默认值117
7.2 pygwidgets包117
7.2.1 设置117
7.2.2 总体设计方法118
7.2.3 添加图片119
7.2.4 添加按钮、复选框和单选按钮119
7.2.5 文本输出和输入122
7.2.6 其他pygwidgets类124
7.2.7 pygwidgets示例程序124
7.3 一致的API的重要性125
7.4 小结125
第三部分 封装、多态性和继承
第8章 封装128
8.1 函数的封装128
8.2 对象的封装129
8.3 封装的含义129
8.3.1 直接访问方式以及为什么应该避免使用这种方式130
8.3.2 严格解释getter和setter133
8.3.3 安全的直接访问135
8.4 使实例变量更加私密135
8.4.1 隐式私有135
8.4.2 更加显式地私有135
8.5 装饰器和@属性136
8.6 pygwidgets类中的封装139
8.7 一个真实的故事140
8.8 抽象141
8.9 小结143
第9章 多态性144
9.1 向现实世界的对象发送消息144
9.2 编程中应用多态性的经典示例145
9.3 使用pygame形状的示例146
9.3.1 Square类146
9.3.2 Circle类和Triangle类147
9.3.3 创建形状的主程序149
9.3.4 扩展模式151
9.4 pygwidgets表现出多态性151
9.5 运算符的多态性152
9.5.1 魔术方法153
9.5.2 比较运算符的魔术方法153
9.5.3 包含魔术方法的Rectangle类154
9.5.4 使用魔术方法的主程序156
9.5.5 数学运算符的魔术方法158
9.5.6 向量示例158
9.6 创建对象中值的字符串表示160
9.7 包含魔术方法的Fraction类162
9.8 小结165
第10章 继承166
10.1 面向对象编程中的继承166
10.2 实现继承167
10.3 Employee和Manager示例168
10.3.1 基类Employee168
10.3.2 子类Manager168
10.3.3 测试代码170
10.4 客户端眼中的子类171
10.5 现实世界的继承示例172
10.5.1 InputNumber172
10.5.2 DisplayMoney174
10.5.3 示例用法176
10.6 从同一个基类继承多个类179
10.7 抽象类和抽象方法182
10.8 pygwidgets如何使用继承185
10.9 类的层次186
10.10 使用继承编程的困难187
10.11 小结188
第11章 管理对象使用的内存189
11.1 对象的生存期189
11.1.1 引用计数189
11.1.2 垃圾回收194
11.2 类变量194
11.2.1 类变量常量194
11.2.2 将类变量用于计数195
11.3 综合运用:气球示例程序196
11.3.1 常量模块197
11.3.2 主程序代码198
11.3.3 气球管理器200
11.3.4 Balloon类和对象202
11.4 使用slots管理内存204
11.5 小结206
第四部分 在游戏开发中使用OOP
第12章 纸牌游戏208
12.1 Card类208
12.2 Deck类210
12.3HigherorLower游戏212
12.3.1 主程序212
12.3.2 Game对象213
12.4 使用__name__进行测试216
12.5 其他纸牌游戏217
12.5.1 Blackjack牌堆217
12.5.2 使用非标准牌堆的游戏217
12.6 小结218
第13章 定时器219
13.1 定时器演示程序219
13.2 实现定时器的3种方法220
13.2.1 统计帧数220
13.2.2 定时器事件221
13.2.3 通过计算经过的时间来创建定时器222
13.3 安装pyghelpers223
13.4 Timer类224
13.5 显示时间226
13.5.1 CountUpTimer226
13.5.2 CountDownTimer228
13.6 小结229
第14章 动画230
14.1 构建动画类230
14.1.1 SimpleAnimation类230
14.1.2 SimpleSpriteSheetAnimation类234
14.1.3 将两个类合并起来237
14.2 pygwidgets中的动画类237
14.2.1 Animation类238
14.2.2 SpriteSheetAnimation类239
14.2.3 公共基类PygAnimation240
14.2.4 示例动画程序240
14.3 小结241
第15章 场景242
15.1 状态机方法242
15.2 状态机的一个pygame示例244
15.3 用于管理许多场景的场景管理器248
15.4 使用场景管理器的一个示例程序249
15.4.1 主程序250
15.4.2 构建场景252
15.4.3 一个典型场景254
15.5 使用场景的Rock,Paper,Scissors255
15.6 场景之间的通信259
15.6.1 从目标场景请求信息259
15.6.2 向目标场景发送信息260
15.6.3 向所有场景发送信息260
15.6.4 测试场景之间的通信260
15.7 场景管理器的实现261
15.7.1 run()方法262
15.7.2 主方法263
15.7.3 场景之间的通信264
15.8 小结265
第16章 完整的Dodger游戏266
16.1 模态对话框266
16.1.1 Yes/No和警告对话框266
16.1.2 Answer对话框269
16.2 构建完整的Dodger游戏271
16.2.1 游戏概述271
16.2.2 实现272
16.2.3 扩展游戏287
16.3 小结287
第17章 设计模式及收尾289
17.1 模型-视图-控制器289
17.1.1 文件显示示例289
17.1.2 统计显示示例290
17.1.3 MVC模式的优势294
17.2 小结294