Python面向對象編程指南

《Python面向對象編程指南》是2016年人民郵電出版社出版的圖書,作者是[美] Steven F. Lott 洛特。

基本信息

【作者】[美]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

相關詞條

相關搜尋

熱門詞條

聯絡我們