編輯推薦
本書包含如下內容。
√ 通過創建類、定義方法來實現Python對象
√ 將相關對象歸類到不同類中,並通過類接口描述這些對象的屬性和行為
√ 使用繼承關係擴展類的功能
√ 理解何時使用面向對象特徵,以及更重要的是,何時不該使用
√ 發現哪些設計模式在Python中有所不同及其原因
√ 發現單元測試的簡易之處,以及為何它對於Python如此重要
√ 學習Python3中常見的並發技術及其陷阱
√ 探索最新的AsyncIO模組來開發大規模並發網路系統
內容提要
《Python 3 面向對象編程(第2版)》主要介紹如何使用Python 3進行面向對象編程。第1~4章介紹面向對象這一編程範式的基本準則,以及Python是如何運用這些準則實現面向對象編程的;第5~8章介紹如何利用Python中的內置函式快速、簡單地實現面向對象編程;第9~11章介紹許多面向對象編程中常用的設計模式,以及如何使用符合Python語言習慣的方式來實現這些設計模式;最後,第12、13章介紹Python 3中與並發編程相關的主題。
《Python 3 面向對象編程(第2版)》中的每一章都會包含一節案例學習的內容,通過一個實踐相關的案例將本章介紹的主要內容以及前面章節中介紹過的內容串聯起來。除此之外,每一章最後的練習旨在指導你利用本章學習到的知識,使用面向對象編程改善以往項目中的代碼,並進一步掌握如何在合適的時機使用Python 3進行面向對象編程。
目錄
第1章 面向對象設計 1
面向對象 1
對象和類 3
指定屬性和行為 5
數據描述對象 5
行為就是動作 7
隱藏細節並創建公共接口 8
組合 11
繼承 13
繼承提供抽象 15
多重繼承 16
案例學習 16
練習 24
總結 24
第2章 Python對象 26
創建Python類 26
添加屬性 28
讓它做點什麼 29
初始化對象 32
自我解釋 34
模組和包 36
組織模組 38
組織模組內容 41
誰可以訪問我的數據 44
第三方庫 46
案例學習 48
練習 56
總結 57
第3章 對象相似時 58
基本的繼承 58
擴展內置對象 60
重寫和super 62
多重繼承 63
鑽石型繼承問題 66
不同集合的參數 71
多態 74
抽象基類 77
使用抽象基類 77
創建抽象基類 78
魔術揭秘 80
案例學習 82
練習 95
總結 95
第4章 異常捕獲 96
拋出異常 96
拋出一個異常 98
異常的作用 99
處理異常 101
異常的層級 106
定義我們自己的異常 108
案例學習 112
練習 122
總結 123
第5章 何時使用面向對象編程 124
將對象看作對象 124
通過屬性向類數據添加行為 128
屬性的細節 131
裝飾器——另一種創建屬性的方法 133
決定何時使用屬性 134
管理員對象 136
移除重複代碼 139
實踐 141
案例學習 144
練習 152
總結 153
第6章 Python數據結構 154
空對象 154
元組和命名元組 155
命名元組 157
字典 159
字典用例 162
使用defaultdict 163
列表 166
列表排序 168
集合 171
擴展內置類型 175
佇列 180
FIFO佇列 181
LIFO佇列 183
優先權佇列 184
案例學習 186
練習 193
總結 194
第7章 Python面向對象的捷徑 195
Python內置函式 195
len()函式 195
反轉函式 196
枚舉 198
檔案I/O 199
放在上下文管理器中 201
方法重載的另一種方式 203
默認參數 204
變數參數列表 206
參數解包 209
函式也是對象 210
將函式作為屬性 215
可調用對象 216
案例學習 217
練習 224
總結 225
第8章 字元串與序列化 226
字元串 226
字元串操作 227
字元串格式化 229
字元串是Unicode 236
可變位元組字元串 240
正則表達式 241
匹配模式 242
從正則表達式中獲取信息 246
序列化對象 249
自定義序列化 251
序列化Web對象 253
案例學習 256
練習 262
總結 263
第9章 疊代器模式 265
設計模式簡介 265
疊代器 266
疊代器協定 266
推導 269
列表推導 269
集合與字典推導 271
生成器表達式 272
生成器 274
從另一個可疊代對象中產生 277
協程 279
回到日誌解析 282
關閉協程並拋出異常 285
協程、生成器與函式的關係 285
案例學習 286
練習 293
總結 294
第10章 Python設計模式I 295
裝飾器模式 295
裝飾器的例子 296
Python中的裝飾器 299
觀察者模式 301
觀察者模式的例子 302
策略模式 304
策略模式的例子 305
Python中的策略 307
狀態模式 307
狀態模式的例子 308
狀態與策略 314
狀態轉換作為協程 314
單例模式 315
單例模式的實現 315
模板模式 319
模板模式的例子 319
練習 323
總結 324
第11章 Python設計模式II 325
適配器模式 325
門面模式 328
享元模式 331
命令模式 335
抽象工廠模式 340
複合模式 344
練習 349
總結 350
第12章 測試面向對象程式 351
為什麼要測試 351
測試驅動開發 353
單元測試 354
斷言方法 355
減少模板代碼並進行清理 357
組織和運行測試 359
忽略失敗的測試 359
用py.test進行測試 361
一種完成設定和清理的方式 363
一種完全不同的設定變數的方式 366
在py.test中跳過測試 370
模擬昂貴的對象 371
多少測試才足夠 375
案例學習 378
實現它 379
練習 384
總結 385
第13章 並發 386
執行緒 386
執行緒的諸多問題 390
執行緒的超常開支 391
多進程 392
多進程池 394
佇列 396
多進程的問題 398
Future對象 398
AsyncIO 401
AsyncIO實踐 402
讀取AsyncIO中的Future對象 403
在網路編程中使用AsyncIO 404
用executor封裝阻塞代碼 407
流 409
案例學習 410
練習 416
總結 417
作者簡介
Dusty Philips是一位來自加拿大的軟體開發者和作者,現居於華盛頓州的西雅圖市。作者在過去15年間活躍於開源社區並主要以Python作為開發語言。他是著名的Puget Sound Programming Python會議組的共同創始人,如果你在附近區域,歡迎前往參加相關會議。
《Python 3面向對象編程》由Packt出版社出版,這是他的第一本書。他同時也創作了書籍《用Kivy創建套用》(O’Reilly),介紹關於Python的移動開發庫。同時其發布了Hacking Happy,介紹技術人員的精神健康之旅。他曾在本書第1版出版之後不久因為自殺傾向而入院治療,並自此成為精神健康的公開倡導者。
譯者序
Python是一門多範式程式語言,這意味著你可以用它進行面向對象編程,也可以選擇使用面向過程編程的方式,甚至可以嘗試函式式編程。而Python最令人著迷之處在於,它擁有極大靈活性的同時,使用的是十分簡單、優雅的語法,因此甚至被稱為“可執行的偽代碼”。本書主要圍繞Python面向對象編程相關的概念與方法,同時也介紹了一些Python 3的新增功能、特性。眾所周知,Python 3的升級、推廣在Python開發者中一直存在較多爭議,批判者的聲音主要集中在其向後不兼容這一點。不過譯者認為Python 3是非常值得開發者花時間去學習、升級的,Python 3中的字元串默認採用UTF-8編碼,這無疑給中文環境的開發者帶來了極大的便捷;此外,採用新的異步編程模型也使得Python在伺服器開發領域更具競爭力。幸運的是,本書對於這幾點都通過單獨章節分別進行了詳細介紹,無論讀者是剛剛接觸Python的初學者,還是打算將Python從之前的版本升級到最新的版本,本書都將很有幫助。
第2版序
我需要懺悔,在我寫本書第1版的時候,我根本不知道自己在做什麼。我認為我了解Python並且知道該怎么寫。很快我就發現這是錯的。幸運的是,通過本書的寫作我已經完全適應了這兩點。
我擔心大家可能會不喜歡《Python 3面向對象編程》這本書,所以我兩年沒有參加PyCon。直到收穫了幾十條正面的反饋,我才重獲信心,終於參加了2012年在聖克拉拉舉辦的PyCon。我很快發現每個人都聽說過我或我的書,完全是我庸人自擾!
書寫完之後我也很怕重新閱讀它。在收到諸多讚譽之前,它一直嚴實地放在我的書架上,直到我需要引用其中的內容回答讀者的提問。在準備本書第2版的時候,我最終不得不面對我的心魔。令我驚喜和開心的是,我發現5年前自己所寫的這本書既準確又令人愉快,一如很多讀者的評價所提到的。
初次閱讀之後不久,我收到了來自Amazon上的第一條負面評價。如果我在完成本書後立即看到這條評價,那將是毀滅性的。幸運的是,4年來的正面評價以及我自己對寫作上的自信,讓我可以忽略辛辣的批評並將剩下的部分作為建設性的反饋。事實上,讀者提出的很多瑕疵都是本書最初出版時Python還未實現的特徵。《Python 3面向對象編程》出版已經有些年頭了,顯然已經到了需要升級的時候。升級的結果現在已經在你手裡(或在你的電子書閱讀器上)。
我經常納悶,為什麼技術類書籍的作者要如此詳細地描述不同版本書籍之間的區別。我的意思是,有多少人會在讀了第1版之後還讀第2版呢?就像軟體的版本一樣,你可以篤定最新的版本是最好的,但你不會真的想要關心它的歷史。不過,這本書占據了我過去一年大部分的時間,所以我不得不提一下這本書已經變得多好了。
其實第1版組織得稍微有些混亂,很多章節結束之後直接跳到下一章,有幾個關鍵位置上的主題之間存在跳躍,甚至更糟糕的是,彼此不相關。現在,討論設計模式之前的2章被重新調整並分為3章,這樣更加順暢地切換到下一個主題。
我同時也徹底刪除了關於Python 3第三方庫的一整章內容。在Python 3和這本書都還是新鮮事物的時候,這一章的存在還算合理。只有幾個庫移植到Python 3,對它們進行詳盡的討論是合理的。不過,我沒辦法深入探討這些主題的細節,坦白地說,針對每一個主題我都可以再寫一整本書。
最後,我添加了全新的一章,關於並發的內容。關於這一章我糾結了一陣,現在可以坦白承認它與面向對象編程並沒有直接的關係。然而,和單元測試那一章一樣,我認為理解並發是所有語言中不可或缺的部分,特別是對於Python生態系統中的面向對象編程。當然,如果你不同意大可跳過這些章節(或者等你改變主意之後再來閱讀它們)。
請盡情享受這本書以及你的面向對象編程之旅!
Dusty Phillips
前言
本書介紹了面向對象範式的相關術語,通過循序漸進的例子聚焦面向對象設計。本書介紹從簡單且是面向對象編程工具箱中最有用的繼承關係,到異常處理和設計模式的內容,以一種面向對象的方式來看待面向對象的概念。
在這一過程中,我們將會學習整合Python程式語言中面向對象和非面向對象的方面,學習操作檔案和字元串的複雜性,並強調(正如Python 3所做的)二進制和文本數據的區別。
我們將會發現單元測試的樂趣,會用到兩個單元測試框架。最後,我們會探索Python眾多的並發範式,學習如何讓不同對象在同一時間一起運行。
本書包含哪些內容
本書可以粗略地分為4個主要部分。前4章我們將會深入探討面向對象編程的準則以及Python是如何運用它們的。第5~8章我們將會通過學習這些準則是如何套用到Python內置函式中的,來探討一些Python特有的套用。第9~11章是關於設計模式的內容。最後兩章探討與Python編程相關同時可能很有趣的主題。
第1章,面向對象設計,介紹了重要的面向對象概念。主要關於一些相關術語,如抽象、類、封裝、繼承。我們也簡單地介紹了用來建模類和對象的UML。
第2章,Python對象,討論類和對象以及如何在Python中使用它們。我們將會學習Python對象的屬性和行為,以及如何將類組織到包和模組中去。最後,我們將會學習如何保護我們的數據。
第3章,對象相似時,幫助我們更加深入地探討繼承關係。包括多重繼承以及如何擴展內置類型。這一章也介紹了多態和鴨子類型在Python中是如何運作的。
第4章,異常捕獲,介紹異常和異常處理。我們將會學習如何創建我們自己的異常,以及如何利用異常控制程式流程。
第5章,何時使用面向對象編程,介紹如何創建和使用對象。我們將會看到如何用屬性封裝數據以及限制數據的訪問。這一章也討論了DRY準則以及如何避免代碼重複。
第6章,Python數據結構,介紹Python內置類的面向對象特徵。我們將會學習元組、字典、列表以及集合,還有幾個更高級的容器類型。我們也將學習如何擴展這些標準對象。
第7章,Python面向對象的捷徑,正如標題所言,這一章介紹使用Python節省時間的方法。我們將會學習很多有用的內置函式,例如用默認參數實現方法重載。我們也將看到函式本身也是對象的特性以及如何利用這一特性。
第8章,字元串與序列化,介紹字元串、檔案以及格式化。我們將會討論字元串、位元組以及位元組數組之間的區別,還有將序列化文本、對象和二進制數據轉化為幾種規範表示的多種不同方式。
第9章,疊代器模式,介紹了設計模式的概念,以及疊代器模式的Python圖形化實現。我們將會學習列表、集合以及字典的推導形式。我們也將理解生成器與協程。
第10章,Python設計模式I,介紹了幾種設計模式,包括裝飾器模式、觀察者模式、策略模式、狀態模式、單例模式以及模板模式。每一種設計模式都通過Python實現的相關的例子程式進行討論。
第11章,Python設計模式II,專注討論更多的設計模式,如適配器模式、門面模式、享元模式、命令模式、抽象模式以及組合模式。用更多的例子說明Python習慣用法與規範實現之間的區別。
第12章,測試面向對象程式,以介紹為何對Python套用進行測試如此重要為開始。強調測試驅動開發,並介紹兩種不同的測試工具unittest和py.test。最後,討論模擬測試對象和代碼覆蓋率相關內容。
第13章,並發,這一章是關於Python所支持(以及缺乏)的併發模式的速成教程。討論了執行緒、多進程、Future以及新的AsyncIO庫。
每一章都包含相關的例子和一個案例學習,案例學習會將本章內容整合到一個可運行的(可能不完整的)程式中。
學習本書你需要用到什麼
本書中所有的例子都是基於Python 3解釋器的。確保你用的不是Python 2.7或更早的版本。在寫本書時,Python 3.4是最新的版本。大部分例子也可以在較早版本的Python 3中運行,但是為了最大限度地減少可能給你帶來的失望情緒,最好用最新版本。
所有的例子都可以運行在任何支持Python的作業系統上。如果不能,請作為錯誤信息提交給我。
有些例子需要連線網際網路。你可能會想要有一個這樣的課外研究和調試。
除此之外,本書中有些例子依賴於不使用Python的第三方庫。在用到它們的時候會進行介紹,因此你並不需要提前安裝。但是為了保持完整性,下面列出會用到的所有庫:
pip
requests
pillow
bitarray
本書的目標讀者
本書尤其針對那些沒有面向對象編程經驗的人,同時也假設你已經擁有了基本的Python技能。你將會深入學習面向對象準則。對於將Python用作“膠水”語言並希望提升編程技巧的系統管理員來說,本書也特別有用。
如果你熟悉用其他語言進行面向對象編程,那么本書將會幫助你用符合Python語言習慣的方式將你的這些知識套用到Python生態系統中。