內容簡介
你的Python項目是否正在變得越來越龐大?隨著代碼的擴展,調試和維護工作變得更加艱難,你是否感到痛苦?Python是一種容易學習和使用的語言,但這也意味著系統可以迅速發展到無法理解的程度。值得慶幸的是,Python具有幫助開發者克服可維護性困境的功能。
在這本實用的書中,作者Patrick Viafore將告訴你如何大限度地使用 Python的類型系統。你將看到用戶定義的類型(如類和枚舉),以及Python的類型提示系統。你還將學習如何使Python代碼具有可擴展性,以及如何基於一個全面的測試策略構建安全網。利用這些知識和技術,你將編寫更清晰、更易於維護的代碼。
通過學習本書,你將:
*了解為什麼類型在現代開發生態系統中是必不可少的。
*了解類、字典和枚舉等類型選擇是如何反映特定意圖的。
*在不加劇臃腫的情況下使Python代碼在未來可擴展。
*使用流行的Python工具來提高代碼庫的安全性和健壯性。
*評估當前的代碼以檢測常見的可維護性問題。
*通過linter和測試構建代碼庫的安全網。
圖書目錄
第1章 健壯的Python簡介9
1.1 健壯性9
1.2 你的意圖是什麼12
1.3 Python中的意圖示例18
1.3.1 集合18
1.3.2 疊代21
1.3.3 最小驚訝原則22
1.4 小結24
第一部分 為代碼添加類型註解
第2章 Python類型簡介27
2.1 類型中有什麼27
2.1.1 機器表達27
2.1.2 語義表達29
2.2 類型系統32
2.2.1 強類型與弱類型32
2.2.2 動態類型與靜態類型33
2.2.3 鴨子類型34
2.3 小結36
第3章 類型註解37
3.1 什麼是類型註解37
3.2 類型註解的好處41
3.2.1 自動補全41
3.2.2 類型檢查器42
第11章 定義你的接口144
11.1 自然接口設計145
11.2 自然的互動148
11.2.1 自然接口實踐149
11.2.2 魔法方法153
11.2.3 上下文管理器155
11.3 小結158
第12章 子類型159
12.1 繼承159
12.2 可替代性163
12.3 設計方面的考慮168
12.4 小結171
第13章 協定172
13.1 類型系統之間的張力172
13.1.1 留空類型或使用Any類型174
13.1.2 使用Union174
13.1.3 使用繼承174
13.1.4 使用mixin176
13.2 協定177
13.3 高級用法179
13.3.1 複合協定179
13.3.2 運行時可檢查協定180
13.3.3 滿足協定的模組180
13.4 小結181
第14章 使用pydantic進行運行時檢查183
14.1 動態配置183
14.2 pydantic189
14.2.1 驗證器190
14.2.2 驗證與解析193
14.3 小結194
第三部分 可擴展的Python
第15章 可擴展性197
15.1 可擴展性是什麼197
15.2 開閉原則203
15.2.1 檢測OCP侵犯203
15.2.2 缺點204
15.3 小結205
第16章 依賴關係206
16.1 關係207
16.2 依賴關係的類型209
16.2.1 物理依賴關係209
16.2.2 邏輯依賴關係212
16.2.3 時間依賴關係213
16.3 可視化你的依賴關係215
16.3.1 可視化包215
16.3.2 可視化導入216
16.3.3 可視化函式調用217
16.3.4 解釋依賴關係圖219
16.4 小結220
第17章 可組合性221
17.1 可組合性介紹221
17.2 策略與機制225
17.3 較小規模的組合228
17.3.1 組合函式228
17.3.2 組合算法231
17.4 小結234
第18章 事件驅動的架構235
18.1 工作原理235
18.2 簡單的事件237
18.2.1 使用訊息代理237
18.2.2 觀察者模式239
18.3 事件流241
18.4 小結243
第19章 可插入的Python245
19.1 模板方法模式246
19.2 策略模式248
19.3 外掛程式式架構250
19.4 小結253
第四部分 構建安全網
第20章 靜態分析257
20.1 lint檢測257
20.1.1 編寫自己的Pylint外掛程式259
20.1.2 分解外掛程式261
20.2 其他靜態分析器263
20.2.1 複雜度檢查器264
20.2.2 安全分析266
20.3 小結267
第21章 測試策略268
21.1 定義測試策略268
21.2 降低測試成本273
21.3 小結282
第22章 驗收測試283
22.1 行為驅動開發284
22.1.1 Gherkin語言284
22.1.2 可執行規範286
22.2 額外的behave特性288
22.2.1 參數化步驟288
22.2.2 表格驅動的需求288
22.2.3 步驟匹配289
22.2.4 定製測試生命周期289
22.2.5 使用標記選擇性地運行測試290
22.2.6 報告生成290
22.3 小結292
第23章 基於屬性的測試293
23.1 用Hypothesis開展基於屬性的測試293
23.1.1 Hypothesis的魔力297
23.1.2 與傳統測試的對比298
23.2 充分利用Hypothesis299
23.2.1 Hypothesis策略299
23.2.2 生成算法300
23.3 小結303
第24章 突變測試305
24.1 什麼是突變測試305
24.2 用mutmut進行突變測試307
24.2.1 修復突變體309
24.2.2 突變測試報告310
24.3 採用突變測試311
24.4 小結314