這是一本全面介紹Python面向?qū)ο缶幊痰膱D書(shū)。本書(shū)共分為4部分。第1章至第6章深入講解了面向?qū)ο缶幊痰暮诵脑瓌t和概念,以及它們?cè)赑ython中的實(shí)現(xiàn)方式。第7章至第9章仔細(xì)探討了Python的數(shù)據(jù)結(jié)構(gòu)、內(nèi)置類(lèi)和方法等,以及如何從面向?qū)ο缶幊痰慕嵌冗M(jìn)行分析和應(yīng)用。第10章至第12章探討了設(shè)計(jì)模式及其在Python中的實(shí)現(xiàn)。第13章和第14章涵蓋了測(cè)試和并發(fā)兩個(gè)重要主題。整本書(shū)以一個(gè)機(jī)器學(xué)習(xí)分類(lèi)算法的實(shí)現(xiàn)案例貫穿始終,并不斷探討各種實(shí)現(xiàn)方式的優(yōu)劣。這是一本全面介紹Python面向?qū)ο缶幊痰膱D書(shū)。本書(shū)共分為4部分。第1章至第6章深入講解了面向?qū)ο缶幊痰暮诵脑瓌t和概念,以及它們?cè)赑ython中的實(shí)現(xiàn)方式。第7章至第9章仔細(xì)探討了Python的數(shù)據(jù)結(jié)構(gòu)、內(nèi)置類(lèi)和方法等,以及如何從面向?qū)ο缶幊痰慕嵌冗M(jìn)行分析和應(yīng)用。第10章至第12章探討了設(shè)計(jì)模式及其在Python中的實(shí)現(xiàn)。第13章和第14章涵蓋了測(cè)試和并發(fā)兩個(gè)重要主題。整本書(shū)以一個(gè)機(jī)器學(xué)習(xí)分類(lèi)算法的實(shí)現(xiàn)案例貫穿始終,并不斷探討各種實(shí)現(xiàn)方式的優(yōu)劣。本書(shū)針對(duì)的是Python面向?qū)ο缶幊痰男率,假設(shè)讀者具備基本的Python技能。對(duì)于有其他面向?qū)ο缶幊陶Z(yǔ)言背景的讀者,本書(shū)將展示Python的許多特性。
第1章 面向?qū)ο笤O(shè)計(jì) 1
1.1 面向?qū)ο蠛?jiǎn)介 1
1.2 對(duì)象和類(lèi) 3
1.3 定義屬性和行為 6
1.3.1 用數(shù)據(jù)描述對(duì)象的狀態(tài) 6
1.3.2 行為就是動(dòng)作 9
1.4 隱藏細(xì)節(jié)并創(chuàng)建公共接口 10
1.5 組合 13
1.6 繼承 16
1.6.1 繼承提供抽象 19
1.6.2 多重繼承 19
1.7 案例學(xué)習(xí) 21
1.7.1 簡(jiǎn)介和問(wèn)題概述 22
1.7.2 上下文視圖 24
1.7.3 邏輯視圖 27
1.7.4 過(guò)程視圖 29
1.7.5 開(kāi)發(fā)視圖 31
1.7.6 物理視圖 33
1.7.7 結(jié)論 34
1.8 回顧 35
1.9 練習(xí) 35
1.10 總結(jié) 36
第2章 Python的對(duì)象 37
2.1 類(lèi)型提示 37
2.2 創(chuàng)建Python的類(lèi) 43
2.2.1 添加屬性 44
2.2.2 讓它做點(diǎn)什么 45
2.2.3 初始化對(duì)象 49
2.2.4 類(lèi)型提示和默認(rèn)值 52
2.2.5 使用文檔字符串 53
2.3 模塊和包 56
2.3.1 組織模塊 59
2.3.2 組織模塊內(nèi)容 63
2.4 誰(shuí)可以訪問(wèn)我的數(shù)據(jù) 68
2.5 第三方庫(kù) 69
2.6 案例學(xué)習(xí) 72
2.6.1 邏輯視圖 72
2.6.2 樣本和狀態(tài) 74
2.6.3 樣本狀態(tài)轉(zhuǎn)換 75
2.6.4 類(lèi)的職責(zé) 80
2.6.5 TrainingData類(lèi) 81
2.7 回顧 85
2.8 練習(xí) 85
2.9 總結(jié) 86
第3章 當(dāng)對(duì)象相似時(shí) 87
3.1 基本繼承 88
3.1.1 擴(kuò)展內(nèi)置對(duì)象 91
3.1.2 重寫(xiě)和super 94
3.2 多重繼承 96
3.2.1 鉆石型繼承問(wèn)題 100
3.2.2 不同集合的參數(shù) 107
3.3 多態(tài) 110
3.4 案例學(xué)習(xí) 114
3.4.1 邏輯視圖 115
3.4.2 另一種距離算法 120
3.5 回顧 122
3.6 練習(xí) 122
3.7 總結(jié) 123
第4章 異常捕獲 124
4.1 拋出異常 125
4.1.1 拋出一個(gè)異常 127
4.1.2 異常的作用 129
4.1.3 處理異常 131
4.1.4 異常的層級(jí) 138
4.1.5 定義我們自己的異常 139
4.1.6 異常并不是例外 142
4.2 案例學(xué)習(xí) 146
4.2.1 上下文視圖 147
4.2.2 過(guò)程視圖 148
4.2.3 什么可能出錯(cuò) 149
4.2.4 錯(cuò)誤的行為 150
4.2.5 通過(guò)CSV文件創(chuàng)建樣本 151
4.2.6 驗(yàn)證枚舉值 155
4.2.7 讀取CSV文件 157
4.2.8 不要重復(fù)你自己 159
4.3 回顧 160
4.4 練習(xí) 161
4.5 總結(jié) 162
第5章 何時(shí)使用面向?qū)ο缶幊?163
5.1 將對(duì)象看作對(duì)象 163
5.2 通過(guò)屬性向類(lèi)數(shù)據(jù)添加行為 170
5.2.1 屬性的細(xì)節(jié) 173
5.2.2 裝飾器——另一種創(chuàng)建屬性的方法 176
5.2.3 決定何時(shí)使用屬性 177
5.3 管理器對(duì)象 180
5.3.1 刪除重復(fù)的代碼 186
5.3.2 實(shí)踐 188
5.4 案例學(xué)習(xí) 192
5.4.1 輸入驗(yàn)證 192
5.4.2 輸入分塊 195
5.4.3 樣本的類(lèi)層級(jí) 196
5.4.4 purpose枚舉類(lèi) 198
5.4.5 Property setters 201
5.4.6 重復(fù)的if語(yǔ)句 201
5.5 回顧 202
5.6 練習(xí) 202
5.7 總結(jié) 203
第6章 抽象基類(lèi)和運(yùn)算符重載 204
6.1 創(chuàng)建抽象基類(lèi) 206
6.1.1 collections模塊中的抽象基類(lèi) 208
6.1.2 抽象基類(lèi)和類(lèi)型提示 211
6.1.3 collections.abc模塊 212
6.1.4 創(chuàng)建自己的抽象基類(lèi) 219
6.1.5 揭開(kāi)魔法的神秘面紗 224
6.2 運(yùn)算符重載 225
6.3 擴(kuò)展內(nèi)置類(lèi) 232
6.4 元類(lèi) 235
6.5 案例學(xué)習(xí) 241
6.5.1 用兩個(gè)子列表擴(kuò)展list類(lèi) 241
6.5.2 分割的洗牌策略 244
6.5.3 分割的增量策略 246
6.6 回顧 249
6.7 練習(xí) 250
6.8 總結(jié) 251
第7章 Python的數(shù)據(jù)結(jié)構(gòu) 252
7.1 空對(duì)象 252
7.2 元組和命名元組 254
使用typing.NamedTuple的命名元組 257
7.3 數(shù)據(jù)類(lèi) 260
7.4 字典 264
7.4.1 字典的用例 270
7.4.2 使用defaultdict 271
7.5 列表 275
列表排序 278
7.6 集合 285
7.7 3種隊(duì)列 289
7.8 案例學(xué)習(xí) 293
7.8.1 邏輯模型 294
7.8.2 凍結(jié)的數(shù)據(jù)類(lèi) 297
7.8.3 NamedTuple類(lèi) 300
7.8.4 結(jié)論 303
7.9 回顧 304
7.10 練習(xí) 304
7.11 總結(jié) 306
第8章 面向?qū)ο缶幊毯秃瘮?shù)式編程 307
8.1 Python的內(nèi)置函數(shù) 307
8.1.1 len()函數(shù) 308
8.1.2 reversed()函數(shù) 309
8.1.3 enumerate()函數(shù) 310
8.2 方法重載的另一種方式 312
8.2.1 參數(shù)的默認(rèn)值 314
8.2.2 可變參數(shù)列表 319
8.2.3 參數(shù)解包 326
8.3 函數(shù)也是對(duì)象 328
8.3.1 函數(shù)對(duì)象和回調(diào)函數(shù) 330
8.3.2 用函數(shù)給類(lèi)打補(bǔ)丁 336
8.3.3 可調(diào)用對(duì)象 338
8.4 文件I/O 340
把它放在上下文中 343
8.5 案例學(xué)習(xí) 348
8.5.1 處理概述 348
8.5.2 分割數(shù)據(jù) 350
8.5.3 重新思考分類(lèi) 351
8.5.4 partition()函數(shù) 354
8.5.5 一次性分割 355
8.6 回顧 358
8.7 練習(xí) 359
8.8 總結(jié) 360
第9章 字符串、序列化和文件路徑 361
9.1 字符串 362
9.1.1 字符串操作 363
9.1.2 字符串格式化 366
9.1.3 字符串是Unicode 377
9.2 正則表達(dá)式 383
9.2.1 模式匹配 385
9.2.2 用正則表達(dá)式解析信息 394
9.3 文件系統(tǒng)路徑 398
9.4 序列化對(duì)象 402
9.4.1 定制pickle 405
9.4.2 用JSON序列化對(duì)象 408
9.5 案例學(xué)習(xí) 411
9.5.1 CSV格式設(shè)計(jì) 412
9.5.2 CSV字典閱讀器 413
9.5.3 CSV列表閱讀器 416
9.5.4 JSON序列化 418
9.5.5 用換行符分隔的JSON 420
9.5.6 JSON驗(yàn)證 421
9.6 回顧 424
9.7 練習(xí) 424
9.8 總結(jié) 426
第10章 迭代器模式 427
10.1 設(shè)計(jì)模式簡(jiǎn)介 427
10.2 迭代器 428
迭代器協(xié)議 429
10.3 推導(dǎo)式 432
10.3.1 列表推導(dǎo)式 432
10.3.2 集合和字典推導(dǎo)式 435
10.3.3 生成器表達(dá)式 436
10.4 生成器函數(shù) 439
10.4.1 通過(guò)另一個(gè)可迭代對(duì)象產(chǎn)生元素 444
10.4.2 生成器堆棧 446
10.5 案例學(xué)習(xí) 450
10.5.1 相關(guān)集合知識(shí) 451
10.5.2 多分區(qū) 452
10.5.3 測(cè)試 457
10.5.4 基本的KNN算法 459
10.5.5 使用bisect模塊的KNN 460
10.5.6 使用headq模塊的KNN 462
10.5.7 結(jié)論 462
10.6 回顧 465
10.7 練習(xí) 465
10.8 總結(jié) 467
第11章 通用設(shè)計(jì)模式 468
11.1 裝飾器模式 469
11.1.1 裝飾器模式示例 470
11.1.2 Python中的裝飾器 478
11.2 觀察者模式 482
觀察者模式示例 483
11.3 策略模式 487
11.3.1 策略模式示例 488
11.3.2 Python中的策略模式 492
11.4 命令模式 493
命令模式示例 494
11.5 狀態(tài)模式 499
11.5.1 狀態(tài)模式示例 500
11.5.2 狀態(tài)模式與策略模式 508
11.6 單例模式 509
單例模式的實(shí)現(xiàn) 510
11.7 案例學(xué)習(xí) 515
11.8 回顧 524
11.9 練習(xí) 525
11.10 總結(jié) 526
第12章 高級(jí)設(shè)計(jì)模式 527
12.1 適配器模式 527
適配器模式示例 529
12.2 外觀模式 533
外觀模式示例 534
12.3 享元模式 538
12.3.1 Python中的享元模式示例 540
12.3.2 包含多條消息的緩沖區(qū) 547
12.3.3 使用Python的__slots__優(yōu)化內(nèi)存 549
12.4 抽象工廠模式 551
12.4.1 抽象工廠模式示例 552
12.4.2 Python中的抽象工廠模式 558
12.5 組合模式 559
組合模式示例 561
12.6 模板模式 567
模板模式示例 568
12.7 案例學(xué)習(xí) 574
12.8 回顧 577
12.9 練習(xí) 577
12.10 總結(jié) 579
第13章 測(cè)試面向?qū)ο蟮某绦?580
13.1 為什么要測(cè)試 580
13.1.1 測(cè)試驅(qū)動(dòng)開(kāi)發(fā) 582
13.1.2 測(cè)試目標(biāo) 583
13.1.3 測(cè)試模式 584
13.2 使用unittest進(jìn)行單元測(cè)試 586
13.3 使用pytest進(jìn)行單元測(cè)試 588
13.3.1 pytest的設(shè)置和清理函數(shù) 591
13.3.2 pytest用于設(shè)置和清理的fixture 594
13.3.3 更高階的fixture 599
13.3.4 用pytest跳過(guò)測(cè)試 606
13.4 使用Mock模擬對(duì)象 608
13.4.1 其他打補(bǔ)丁技術(shù) 612
13.4.2 sentinal對(duì)象 615
13.5 進(jìn)行多少測(cè)試才是足夠的 617
13.6 開(kāi)發(fā)和測(cè)試 621
13.7 案例學(xué)習(xí) 622
13.7.1 距離算法類(lèi)的單元測(cè)試 623
13.7.2 Hyperparameter類(lèi)的單元測(cè)試 629
13.8 回顧 633
13.9 練習(xí) 634
13.10 總結(jié) 636
第14章 并發(fā) 637
并發(fā)處理的背景 638
14.1 線程 640
線程的許多問(wèn)題 642
14.2 多進(jìn)程 644
14.2.1 多進(jìn)程池 647
14.2.2 隊(duì)列 651
14.2.3 多進(jìn)程的問(wèn)題 656
14.3 future 657
14.4 AsyncIO 662
14.4.1 AsyncIO實(shí)戰(zhàn) 663
14.4.2 讀取AsyncIO future 665
14.4.3 網(wǎng)絡(luò)AsyncIO 666
14.4.4 日志編寫(xiě)演示 674
14.4.5 AsyncIO客戶端 677
14.5 哲學(xué)家用餐問(wèn)題 681
14.6 案例學(xué)習(xí) 685
14.7 回顧 690
14.8 練習(xí) 690
14.9 總結(jié) 692