Python 3 面向對象編程(第2版)

Python 3 面向對象編程(第2版)

《Python 3 面向對象編程(第2版)》

全面介紹Python 3面向對象編程的特性,並且通過實踐案例把知識串起來,方便讀者學以致用

【加】Dusty Phillips 著

孫雨生 譯

ISBN 978-7-121-34136-6

2018年6月出版

定價:99.00元

440頁

16開

編輯推薦

本書包含如下內容。

√ 通過創建類、定義方法來實現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生態系統中。

相關詞條

熱門詞條

聯絡我們