天天看點

《易學Python》——第6章 類與面向對象程式設計 6.1 類是什麼

本節書摘來自異步社群《易學python》一書中的第6章,第6.1節,作者[澳]anthony briggs,王威,袁國忠 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

本章介紹如下内容:

一種看待類的更簡單方式;

如何使用類來設計程式。

在本書前面,始終未涉及python中組織程式的基本方式之一:類。類和面向對象程式設計通常被認為是一個龐大而吓人的主題,僅供真正的程式員用來編寫程式,是以您可能認為,要正确地使用它們,需要大量的理論知識。沒有比這種看法更離譜的了。在python中,使用類和面向程式設計易如反掌。

在本章中,您将首先複習第2章為遊戲hunt the wumpus編寫的洞穴生成代碼,并了解到使用類編寫這些代碼容易得多;然後,您将以此為基礎,參照adventure和zork編寫一個功能齊備的冒險遊戲。在此期間,您将全面學習python類以及如何充分利用它們。

易學python

如果您回顧第2章,可能還記得您編寫了一系列函數,用于處理玩家進入和wumpus所處的洞穴。有建立洞穴的函數,有使用通道将洞穴連通的函數,有確定所有洞穴都連在一起的函數,不一而足。在第2章編寫程式時,您完全依靠函數來處理洞穴;另一種方式是建立一個類來辨別這些函數,并将它們之間的關系固定下來。

看待類的另一種方式是,将其視為容器或包裝器,包含要在程式中使用的資料。您可将執行特定任務所需的資料都封裝起來,并提供處理它們的函數。在資料特别複雜、難以處理或需要保持一緻(如跟蹤銀行賬戶餘額的程式)時,尤其适合這樣做。

類類似于抽象資料類型,包含一組資料以及可對這些資料執行的所有操作。您無需在類中指定可對資料執行的各種可能操作,而隻根據具體情況指定有用的操作。然而,設計類時,考慮其各種可能用途并包含合理的操作常常大有裨益。

可将類視為橡皮圖章,圖章刻好後,就可用它輕松地蓋章,想蓋多少次都行。類的工作原理與此類似。您通常不直接使用類,而使用其執行個體——使用類建立的對象。

類的一個優點是,如果需要稍微不同的圖案,隻需複制原來的類,再稍作修改。圖6.1以橡皮圖章的方式展示了本章将用到的類。

《易學Python》——第6章 類與面向對象程式設計 6.1 類是什麼

執行個體和類本身都可以有方法和資料供您調用和通路。在很大程度上說,這些都将在您建立執行個體時設定,但python允許您動态地更新它們,甚至重新綁定方法。

程式清單6.1是一個類,您應感到眼熟,雖然有些部分與以前截然不同。這是您在第2章編寫的洞穴清單和方法,但将它們封裝在類中了。

程式清單6.1 用于存儲洞穴的對象

《易學Python》——第6章 類與面向對象程式設計 6.1 類是什麼
《易學Python》——第6章 類與面向對象程式設計 6.1 類是什麼
《易學Python》——第6章 類與面向對象程式設計 6.1 類是什麼

将所有函數都放在類中有什麼好處呢?主要好處是所有有關洞穴的細節都包含在您建立的執行個體中。這樣,您可以同時建立其他洞穴系統,而不用擔心它們互相沖突。您還可以擴充這個類(包含洞穴名和其他函數)或添加擴充洞穴系統的方法。

然而,這個caves類存在一個問題。雖然您建立了類且其效果不錯,但這依然不是面向對象設計,您隻是将既有功能放到了類中。如果以後要添加額外功能,如在洞穴中撿寶、更多怪物等,将很難。在第2章,添加函數改變了程式的設計,同樣,為妥善地使用類,必須調整設計重點。