基本信息
【作者】 | [美]StevenF.Lott洛特 | 【編輯】 | 陳冀康 |
【ISBN】 | 978-7-115-40558-6 | 【日期】 | 2016-03 |
【版次】 | 1 | 【印次】 | 1 |
【頁數】 | 433頁 | 【字數】 | 712千字 |
【開本】 | 16 | 【定價】 | 79元 |
圖書簡介
Python是一種面向對象、解釋型的程式設計語言,它已經被成功套用於科學計算、數據分析以及遊戲開發等諸多領域。
本書深入介紹Python語言的面向對象特性,全書分3個部分共18章。第1部分講述用特殊方法實現Python風格的類,分別介紹了__init__()方法、與Python無縫集成—基本特殊方法、屬性訪問和特性及修飾符、抽象基類設計的一致性、可調用對象和上下文的使用、創建容器和集合、創建數值類型、裝飾器和mixin—橫切方面;第2部分講述持久化和序列化,分別介紹了序列化和保存、用Shelve保存和獲取對象、用SQLite保存和獲取對象、傳輸和共享對象、配置檔案和持久化;第3部分講述測試、調試、部署和維護,分別介紹了Logging和Warning模組、可測試性的設計、使用命令行、模組和包的設計、質量和文檔。
目錄
第1部分 用特殊方法實現Python風格的類 ..................................................................................... 1
第1章 __init__()方法 ............................................................................................................................ 5
1.1 隱式的基類——object .............................................................................................................. 5
1.2 基類中的__init__()方法 ........................................................................................................... 6
1.3 在基類中實現__init__()方法 ................................................................................................... 7
1.4 使用__init__()方法創建常量清單 ........................................................................................... 8
1.5 通過工廠函式調用__init__() ................................................................................................... 9
1.5.1 錯誤的工廠設計和模糊的else語句 ............................................................................... 10
1.5.2 使用elif簡化設計來獲得一致性 ................................................................................... 11
1.5.3 使用映射和類來簡化設計 ............................................................................................... 11
1.6 在每個子類中實現__init__()方法 ......................................................................................... 14
1.7 簡單的組合對象 ...................................................................................................................... 16
1.7.1 封裝集合類 ...................................................................................................................... 16
1.7.2 擴展集合類 ...................................................................................................................... 17
1.7.3 可適應更多需求的另一種設計 ....................................................................................... 17
1.8 複合的組合對象 ...................................................................................................................... 18
1.9 不帶__init__()方法的無狀態對象 ......................................................................................... 19
1.10 一些其他的類定義 ................................................................................................................ 20
1.11 多策略的__init__()方法........................................................................................................ 22
1.11.1 更複雜的初始化方式 ..................................................................................................... 23
1.11.2 靜態函式的初始化 ......................................................................................................... 24
1.12 更多的__init__()技術 ........................................................................................................... 24
1.12.1 帶有類型驗證的初始化 ................................................................................................. 26
1.12.2 初始化、封裝和私有化 ................................................................................................. 28
1.13 總結 ......................................................................................................................................... 29
2 目錄
第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.2 setter和deleter特性 ........................................................................................................ 71
目錄 3
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.7 abc模組 .................................................................................................................................... 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
4 目錄
5.8.3 展望 ................................................................................................................................ 109
第6章 創建容器和集合 ..................................................................................................................... 110
6.1 集合的抽象基類 .................................................................................................................... 110
6.2 特殊方法示例 ........................................................................................................................ 111
6.3 使用標準庫的擴展 ................................................................................................................ 112
6.3.1 namedtuple()函式 ........................................................................................................... 112
6.3.2 deque類 .......................................................................................................................... 114
6.3.3 使用ChainMap ............................................................................................................... 115
6.3.4 OrderedDict集合 ............................................................................................................ 116
6.3.5 defaultdict子類 .............................................................................................................. 118
6.3.6 counter集合.................................................................................................................... 119
6.4 創建新集合 ............................................................................................................................ 120
6.5 定義一種新的序列 ................................................................................................................ 121
6.5.1 一個用於統計的list ....................................................................................................... 122
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.1 numbers的抽象基類 ............................................................................................................. 139
7.1.1 決定使用哪種類型 ......................................................................................................... 141
7.1.2 方法解析和運算符映射 ................................................................................................. 141
7.2 算術運算符的特殊方法 ....................................................................................................... 142
7.3 創建一個數字類 .................................................................................................................... 144
7.3.1 FixedPoint的初始化 ...................................................................................................... 144
7.3.2 定義固定小數點位數的二進制算術運算符 ................................................................. 146
目錄 5
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
8.1 類和描述 ................................................................................................................................ 156
8.1.1 創建函式 ........................................................................................................................ 157
8.1.2 創建類 ............................................................................................................................ 158
8.1.3 一些類設計原則 ............................................................................................................. 159
8.1.4 面向方面編程................................................................................................................. 159
8.2 使用內置的裝飾器 ................................................................................................................ 160
8.3 使用標準庫中的mixin類 .................................................................................................... 161
8.3.1 使用上下文管理器的mixin類 ..................................................................................... 162
8.3.2 禁用類的一個功能 ......................................................................................................... 163
8.4 寫一個簡單的函式裝飾器 ................................................................................................... 164
8.5 帶參數的裝飾器 .................................................................................................................... 166
8.6 創建方法函式裝飾器 ............................................................................................................ 167
8.7 創建類裝飾器 ........................................................................................................................ 169
8.8 向類中添加方法函式 ............................................................................................................ 170
8.9 將裝飾器用於安全性 ............................................................................................................ 172
8.10 總結 ....................................................................................................................................... 173
8.10.1 設計要素和折中方案 ................................................................................................... 173
8.10.2 展望 .............................................................................................................................. 174
第2部分 持久化和序列化 ................................................................................................................. 175
第9章 序列化和保存——JSON、YAML、Pickle、CSV和XML ........................................ 178
9.1 持久化、類、狀態以及數據表示 ....................................................................................... 179
9.2 檔案系統和網路的考慮 ....................................................................................................... 180
9.3 定義用於持久化的類 ............................................................................................................ 181
9.4 使用JSON進行轉儲和載入................................................................................................ 184
9.4.1 在類中支持JSON .......................................................................................................... 185
6 目錄
9.4.2 自定義JSON編碼 ......................................................................................................... 186
9.4.3 自定義JSON解碼 ......................................................................................................... 188
9.4.4 安全性和eval() .............................................................................................................. 189
9.4.5 重構編碼函式................................................................................................................. 189
9.4.6 日期字元串的標準化 ..................................................................................................... 190
9.4.7 將JSON寫入檔案 ......................................................................................................... 191
9.5 使用YAML進行轉儲和載入 .............................................................................................. 192
9.5.1 YAML檔案的格式化 .................................................................................................... 193
9.5.2 擴展YAML的表示 ....................................................................................................... 194
9.5.3 安全性與安全載入 ......................................................................................................... 196
9.6 使用pickle進行轉儲和載入........................................................................................... 196
9.6.1 針對可靠的pickle處理進行類設計 ............................................................................. 197
9.6.2 安全性和全局性問題 ..................................................................................................... 199
9.7 轉儲和載入CSV ................................................................................................................... 200
9.7.1 將簡單的序列轉儲為CSV ............................................................................................ 200
9.7.2 從CSV檔案中載入簡單的序列 ................................................................................... 201
9.7.3 處理集合與複雜的類 ..................................................................................................... 202
9.7.4 在一個CSV檔案中轉儲並從多類型的行中載入數據 ............................................... 203
9.7.5 使用疊代器篩選CSV中的行 ....................................................................................... 204
9.7.6 從CSV檔案中轉儲和載入連線的行 ........................................................................... 205
9.8 使用XML轉儲和載入 ......................................................................................................... 207
9.8.1 使用字元串模板轉儲對象 ............................................................................................. 208
9.8.2 使用xml.etree.ElementTree轉儲對象 .......................................................................... 209
9.8.3 載入XML文檔 .............................................................................................................. 210
9.9 總結 ......................................................................................................................................... 211
9.9.1 設計要素和折中方案 ..................................................................................................... 211
9.9.2 模式演化 ........................................................................................................................ 212
9.9.3 展望 ................................................................................................................................ 213
第10章 用Shelve保存和獲取對象 ................................................................................................. 214
10.1 分析持久化對象用例 ......................................................................................................... 215
10.2 創建shelf.............................................................................................................................. 216
10.3 設計適於存儲的對象 ......................................................................................................... 217
10.3.1 為我們的對象設計鍵 ................................................................................................... 217
10.3.2 為對象生成代理鍵 ....................................................................................................... 218
10.3.3 設計一個帶有簡單鍵的類 ........................................................................................... 218
10.3.4 為容器和集合設計類 ................................................................................................... 220
10.3.5 用外鍵引用對象 ........................................................................................................... 220
目錄 7
10.3.6 為複雜對象設計CRUD操作 ...................................................................................... 222
10.4 搜尋、掃描和查詢 .............................................................................................................. 223
10.5 為shelve設計數據訪問層 ................................................................................................. 224
10.6 用索引提高性能 .................................................................................................................. 227
10.7 有關更多的索引維護工作 ................................................................................................. 230
10.8 用writeback代替更新索引 ............................................................................................... 232
10.9 總結 ....................................................................................................................................... 233
10.9.1 設計要素和折中方案 ................................................................................................... 233
10.9.2 套用軟體層................................................................................................................... 234
10.9.3 展望 .............................................................................................................................. 234
第11章 用SQLite保存和獲取對象 ............................................................................................... 235
11.1 SQL資料庫、持久化和對象 ............................................................................................. 235
11.1.1 SQL數據模型—行和表 .......................................................................................... 236
11.1.2 使用SQL的DML語句完成CRUD .......................................................................... 238
11.1.3 使用SQL中SELECT語句執行查詢 ......................................................................... 240
11.1.4 SQL事務和ACID屬性 .............................................................................................. 240
11.1.5 設計資料庫中的主鍵和外鍵 ....................................................................................... 242
11.2 使用SQL處理程式中的數據............................................................................................ 243
11.3 從Python對象到SQLite BLOB列的映射 ...................................................................... 245
11.4 手動完成從Python對象到資料庫中行的映射 ............................................................... 247
11.4.1 為SQLite設計一個訪問層 ......................................................................................... 248
11.4.2 實現容器的關係 ........................................................................................................... 251
11.5 使用索引提高性能 .............................................................................................................. 252
11.6 添加ORM層 ....................................................................................................................... 252
11.6.1 設計ORM友好的類 .................................................................................................... 253
11.6.2 使用ORM層創建模型 ................................................................................................ 255
11.6.3 使用ORM層操作對象 ................................................................................................ 256
11.7 通過指定標籤字元串查詢文章對象 ................................................................................. 258
11.8 通過創建索引提高性能...................................................................................................... 259
11.9 總結 ....................................................................................................................................... 261
11.9.1 設計要素和折中方案 ................................................................................................... 261
11.9.2 映射的方法 ................................................................................................................... 261
11.9.3 鍵和鍵的設計 ............................................................................................................... 262
11.9.4 套用軟體層 ................................................................................................................... 262
11.9.5 展望 ............................................................................................................................... 262
8 目錄
第12章 傳輸和共享對象 ................................................................................................................... 263
12.1 類、狀態和表示 .................................................................................................................. 263
12.2 用HTTP和REST傳輸對象 ............................................................................................. 264
12.2.1 用REST實現CRUD操作 .......................................................................................... 264
12.2.2 實現非CRUD操作 ..................................................................................................... 265
12.2.3 REST協定和ACID ..................................................................................................... 266
12.2.4 選擇一種表示方法—JSON、XML或者YAML ................................................... 266
12.3 實現一個REST伺服器——WSGI和mod_wsgi ........................................................... 267
12.3.1 創建簡單的REST應用程式和伺服器 ....................................................................... 267
12.3.2 實現REST客戶端 ....................................................................................................... 270
12.3.3 演示RESTful服務並創建單元測試 ........................................................................... 271
12.4 使用可回調類創建WSGI應用程式 ................................................................................ 272
12.4.1 設計RESTful對象標識符 .......................................................................................... 274
12.4.2 多層REST服務 ........................................................................................................... 275
12.4.3 創建roulette伺服器 .................................................................................................... 279
12.4.4 創建roulette客戶端 .................................................................................................... 280
12.5 創建安全的REST服務 ...................................................................................................... 281
12.6 用Web應用程式框架實現REST ..................................................................................... 284
12.7 用訊息佇列傳輸對象 ......................................................................................................... 285
12.7.1 定義進程 ...................................................................................................................... 286
12.7.2 創建佇列和提供數據 ................................................................................................... 287
12.8 總結 ....................................................................................................................................... 289
12.8.1 設計要素和折中方案 ................................................................................................... 289
12.8.2 模式演變 ...................................................................................................................... 289
12.8.3 應用程式軟體層次 ....................................................................................................... 290
12.8.4 展望 .............................................................................................................................. 290
第13章 配置檔案和持久化 ............................................................................................................... 291
13.1 配置檔案的使用場景 ......................................................................................................... 291
13.2 表示、持久化、狀態和可用性 ......................................................................................... 293
13.2.1 應用程式配置的設計模式 ........................................................................................... 293
13.2.2 使用對象的構造完成配置 ........................................................................................... 294
13.2.3 實現具有層次結構的配置 ........................................................................................... 295
13.3 使用INI檔案保存配置 ...................................................................................................... 296
13.4 使用eval()完成更多的文字處理 ...................................................................................... 299
13.5 使用PY檔案存儲配置 ...................................................................................................... 299
13.5.1 使用類定義進行配置 ................................................................................................... 300
目錄 9
13.5.2 通過SimpleNamespace進行配置 ............................................................................... 301
13.5.3 在配置中使用Python的exec() .................................................................................. 304
13.6 為什麼執行exec()沒有問題 .............................................................................................. 305
13.7 為默認值和重寫使用鏈映射 ............................................................................................. 306
13.8 使用JSON或YAML檔案存儲配置 ................................................................................ 307
13.8.1 使用壓平的JSON配置 ............................................................................................... 309
13.8.2 載入YAML配置 ......................................................................................................... 310
13.9 使用特性檔案存儲配置 ..................................................................................................... 311
13.9.1 解析特性檔案............................................................................................................... 312
13.9.2 使用特性檔案............................................................................................................... 314
13.10 使用XML檔案——PLIST以及其他格式保存配置 ................................................... 315
13.11 總結 ..................................................................................................................................... 318
13.11.1 設計要素和折中方案 ................................................................................................. 318
13.11.2 創建共享配置 ............................................................................................................. 319
13.11.3 模式演化 ..................................................................................................................... 319
13.11.4 展望 ............................................................................................................................. 319
第3部分 測試、調試、部署和維護 ................................................................................................ 321
第14章 Logging和Warning模組 ................................................................................................. 324
14.1 創建基本日誌 ...................................................................................................................... 324
14.1.1 創建共享的類級記錄器 ............................................................................................... 325
14.1.2 配置日誌記錄器 ........................................................................................................... 326
14.1.3 開始和關閉日誌記錄系統 ........................................................................................... 326
14.1.4 使用命名的日誌記錄器 ............................................................................................... 328
14.1.5 擴展日誌等級............................................................................................................... 329
14.1.6 定義指向多個目標輸出的handler .............................................................................. 329
14.1.7 管理傳播規則............................................................................................................... 331
14.2 理解配置 .............................................................................................................................. 332
14.3 為控制、調試、審計和安全創建專門的日誌 ................................................................ 332
14.3.1 創建調試日誌............................................................................................................... 334
14.3.2 創建審計和安全日誌 ................................................................................................... 335
14.4 使用warnings模組 ............................................................................................................. 337
14.4.1 用警告信息顯示API變化 .......................................................................................... 337
14.4.2 用警告信息顯示配置問題 ........................................................................................... 338
14.4.3 用警告信息顯示可能存在的軟體問題 ....................................................................... 339
14.5 高級日誌——最後一些信息和網路目標地址 ................................................................ 340
14.5.1 創建自動的tail緩衝區 ................................................................................................ 340
10 目錄
14.5.2 傳送日誌訊息到遠程的進程 ....................................................................................... 342
14.5.3 防止佇列溢出............................................................................................................... 345
14.6 總結 ....................................................................................................................................... 346
14.6.1 設計要素和折中方案 ................................................................................................... 346
14.6.2 展望 .............................................................................................................................. 347
第15章 可測試性的設計 ................................................................................................................... 348
15.1 為測試定義並隔離單元 ..................................................................................................... 348
15.1.1 最小化依賴................................................................................................................... 349
15.1.2 創建簡單的單元測試 ................................................................................................... 351
15.1.3 創建一個測試組件 ....................................................................................................... 352
15.1.4 包含邊界值測試 ........................................................................................................... 353
15.1.5 為測試模仿依賴 ........................................................................................................... 354
15.1.6 為更多的行為使用更多的模仿對象 ........................................................................... 357
15.2 使用doctest來定義測試用例 ............................................................................................ 357
15.2.1 將doctest與unittest相結合 ........................................................................................ 360
15.2.2 創建一個更完整的測試包 ........................................................................................... 360
15.3 使用安裝和卸載 .................................................................................................................. 361
15.3.1 使用OS資源進行安裝和卸載 .................................................................................... 362
15.3.2 結合資料庫進行安裝和卸載 ....................................................................................... 363
15.4 TestCase的類層次結構 ...................................................................................................... 366
15.5 使用外部定義的期望結果 ................................................................................................. 367
15.6 自動化集成和性能測試 ..................................................................................................... 370
15.7 總結 ....................................................................................................................................... 371
15.7.1 設計要素和折中方案 ................................................................................................... 372
15.7.2 展望 .............................................................................................................................. 372
第16章 使用命令行 ........................................................................................................................... 373
16.1 作業系統接口和命令行 ..................................................................................................... 373
16.2 用argparse解析命令行 ...................................................................................................... 375
16.2.1 簡單的on/off選項 ....................................................................................................... 376
16.2.2 帶參數選項................................................................................................................... 377
16.2.3 位置參數 ...................................................................................................................... 377
16.2.4 所有其他參數............................................................................................................... 377
16.2.5 --version的顯示和退出 ............................................................................................... 378
16.2.6 --help的顯示和退出 .................................................................................................... 378
16.3 集成命令行選項和環境變數 ............................................................................................. 378
16.3.1 提供更多的可配置默認值 ........................................................................................... 379
目錄 11
16.3.2 用環境變數覆蓋配置檔案設定 ................................................................................... 380
16.3.3 用配置檔案覆蓋環境變數 ........................................................................................... 381
16.3.4 讓配置檔案理解None ................................................................................................. 381
16.4 自定義幫助文檔的輸出 ..................................................................................................... 382
16.5 創建頂層main()函式 .......................................................................................................... 383
16.5.1 確保配置遵循DRY原則 ............................................................................................ 385
16.5.2 管理嵌套的配置上下文 ............................................................................................... 385
16.6 大規模程式設計 .................................................................................................................. 386
16.6.1 設計命令類................................................................................................................... 386
16.6.2 添加用於分析的命令子類 ........................................................................................... 388
16.6.3 向應用程式中添加更多的功能 ................................................................................... 389
16.6.4 設計更高級的複合命令 ............................................................................................... 389
16.7 其他的複合命令設計模式 ................................................................................................. 391
16.8 與其他應用程式集成 ......................................................................................................... 392
16.9 總結 ....................................................................................................................................... 392
16.9.1 設計要素和折中方案 ................................................................................................... 393
16.9.2 展望 .............................................................................................................................. 393
第17章 模組和包的設計 ................................................................................................................... 394
17.1 設計一個模組 ...................................................................................................................... 394
17.1.1 一些模組設計的方法 ................................................................................................... 395
17.1.2 模組和類 ...................................................................................................................... 396
17.1.3 模組中應該包含的內容 ............................................................................................... 397
17.2 全局模組和模組項 .............................................................................................................. 398
17.3 包的設計 .............................................................................................................................. 399
17.3.1 包與模組的混合設計 ................................................................................................... 400
17.3.2 使用多種實現進行包的設計 ....................................................................................... 401
17.4 主腳本和__main__模組的設計 ......................................................................................... 402
17.4.1 創建可執行腳本檔案 ................................................................................................... 402
17.4.2 創建__main__模組 ....................................................................................................... 403
17.4.3 大規模編程................................................................................................................... 403
17.5 設計長時間運行的套用 ..................................................................................................... 404
17.6 使用src、bin和test來組織代碼 ..................................................................................... 406
17.7 安裝Python模組 ................................................................................................................ 407
17.8 總結 ....................................................................................................................................... 408
17.8.1 設計要素和折中方案 ................................................................................................... 408
17.8.2 展望 .............................................................................................................................. 408
12 目錄
第18章 質量和文檔 ........................................................................................................................... 409
18.1 為help()函式編寫docstrings ............................................................................................. 409
18.2 用pydoc編寫文檔 .............................................................................................................. 410
18.3 通過RST標記提供更好的輸出 ....................................................................................... 411
18.3.1 文本塊 .......................................................................................................................... 412
18.3.2 RST內聯標記 .............................................................................................................. 413
18.3.3 RST指令 ...................................................................................................................... 414
18.3.4 學習RST ...................................................................................................................... 415
18.4 編寫有效的文檔字元串 ..................................................................................................... 415
18.5 編寫檔案級別的文檔字元串——包括模組和包 ............................................................ 416
18.5.1 用RST標記編寫詳細的API文檔 ............................................................................. 417
18.5.2 編寫類和方法函式的文檔字元串 ............................................................................... 419
18.5.3 編寫函式文檔字元串 ................................................................................................... 420
18.6 更複雜的標記技術 .............................................................................................................. 420
18.7 用Sphinx生成文檔 ............................................................................................................ 421
18.7.1 使用Sphinx的快速啟動 ............................................................................................. 421
18.7.2 編寫Sphinx文檔 ......................................................................................................... 423
18.7.3 在文檔中加入4+1視圖 .............................................................................................. 424
18.7.4 編寫實現文檔............................................................................................................... 425
18.7.5 用Sphinx創建交叉引用 ............................................................................................. 426
18.7.6 將Sphinx檔案重構為目錄 ......................................................................................... 427
18.8 編寫文檔 .............................................................................................................................. 427
18.9 大綱式編程 .......................................................................................................................... 428
18.9.1 大綱式編程用例 ........................................................................................................... 428
18.9.2 使用大綱式編程工具 ................................................................................................... 429
18.10 總結 ..................................................................................................................................... 432