|
-- 會員 / 註冊 --
|
|
|
|
Python 3 面向對象編程(第2版) ( 簡體 字) |
作者:孫雨生 | 類別:1. -> 程式設計 -> Python |
譯者: |
出版社:電子工業出版社 | 3dWoo書號: 49347 詢問書籍請說出此書號!【缺書】 NT售價: 495 元 |
出版日:6/1/2018 |
頁數:440 |
光碟數:0 |
|
站長推薦: |
印刷:黑白印刷 | 語系: ( 簡體 版 ) |
|
加入購物車 │加到我的最愛 (請先登入會員) |
ISBN:9787121341366 |
作者序 | 譯者序 | 前言 | 內容簡介 | 目錄 | 序 |
(簡體書上所述之下載連結耗時費功, 恕不適用在台灣, 若讀者需要請自行嘗試, 恕不保證) |
作者序: |
譯者序: |
前言:譯者序
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生態系統中。 約定 本書使用不同的文本格式來區別不同的信息。下面是一些格式的例子,以及它們的含義。 文本中的代碼、數據庫表名、目錄名、文件名、文件后綴名、路徑名、URL、用戶輸入以及Twitter用戶名以如下方式展示:“我們從字典中查詢類,并存儲到名為PropertyClass的變量中。” 一個代碼塊可以設定為如下所示的樣式: def add_property(self): property_type = get_valid_input( "What type of property? ", ("house", "apartment")).lower() payment_type = get_valid_input( "What payment type? ", ("purchase", "rental")).lower() 當我們想要讓你特別關注代碼塊中的特定部分時,相關的行或項將會加粗顯示: def add_property(self): property_type = get_valid_input( "What type of property? ", ("house", "apartment")).lower() payment_type = get_valid_input( "What payment type? ", ("purchase", "rental")).lower() 任何命令行的輸入或輸出都將會被設定為如下格式: >>> c1 = Contact("John A", "johna@example.net") >>> c2 = Contact("John B", "johnb@example.net") >>> c3 = Contact("Jenna C", "jennac@example.net") >>> [c.name for c in Contact.all_contacts.search(’John’)] [’John A’, ’John B’] 新的術語或重要單詞將會以黑體呈現。你在屏幕、菜單或對話框中看到的單詞,將會以這種形式出現:“將出現參數不夠的錯誤,和我們前面忘記self參數一樣。” 讀者反饋 歡迎讀者反饋意見。讓我們知道你是如何看待本書的——有什么是你喜歡或不喜歡的。讀者反饋對我們非常重要,因為可以幫助我們開發對你們更有用的內容。 可以通過feedback@packtpub.com發送一般性的反饋,只要在郵件主題中提及本書書名即可。 如果有哪個你擅長的領域,你想要寫作或貢獻一本書,請訪問www.packtpub. com/authors查看我們的作者指南。 客戶支持 現在你已經是Packt尊貴的讀者了,我們提供如下一些資源可以幫助你收獲更多。 下載示例代碼 你可以從http://www.packtpub.com上你的賬戶中下載所有你購買的Packt出版的書籍中的示例代碼。如果你從別處購買了本書,你可以訪問http://www.packtpub. com/support并注冊,然后直接通過郵件獲取這些文件。 勘誤 盡管我們已經盡可能保證內容的準確性,但仍然難以避免存在錯誤。如果你在我們的書中發現了錯誤——不管是文字錯誤還是代碼錯誤——如果你能夠告訴我們,我們將會非常感激。這樣一來,你也可以幫助其他讀者避免很多困惑,并且幫助我們在后續版本中不斷改進。如果你發現任何錯誤,請訪問http://www.packtpub.com/submit-errata,選擇對應的書,單擊勘誤提交表鏈接,并輸入詳細的錯誤信息。一旦確認了你的勘誤,你提交的內容將會被接受,這一勘誤信息將會上傳到我們的網站,或者添加到對應書籍的勘誤章節列表中。 訪問https://www.packtpub.com/books/content/support并在搜索框中輸入書名,可以查看之前提交的勘誤。所需的信息將會出現在勘誤章節中。 版權 流傳于互聯網上的內容,版權是所有媒體正在面臨的問題。在Packt,我們嚴格保護版權與許可。如果你在網上看到任何關于我們書籍的非法副本,請立即向我們提供地址或網站名,我們將進行追蹤維權。 請通過copyright@packtpub.com向我們提供可疑盜版材料的鏈接。 感謝你幫助我們保護我們的作者以及我們向你提供有價值內容的能力。 問題 如果對本書有任何問題,你可以通過與我們取得聯系,我們將會傾盡全力幫你解決。 |
內容簡介:本書主要介紹如何使用Python 3進行面向對象編程。1~4章介紹面向對象這一編程范式的基本準則,以及Python是如何運用這些準則實現面向對象編程的;第5~8章,介紹如何利用Python中的內置函數快速、簡單地實現面向對象編程;第9~11章介紹了許多面向對象編程中常用的設計模式,以及如何使用符合 Python 語言習慣的方式來實現這些設計模式;最后第12、13章介紹了Python 3中并發編程相關的主題。本書中每一章都會包含一節案例學習的內容,通過一個實踐相關的案例將本章介紹的主要內容以及前面章節中介紹過的內容串聯起來。除此之外,每一章最后的練習旨在指導你利用本章學習到的內容,使用面向對象編程改善以往項目中的代碼,并進一步掌握如何在合適的時機使用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 |
序: |
|