本節書摘來自異步社群《python面向對象程式設計指南》一書中的第1章,第1.3節,作者[美]steven f. lott, 張心韬 蘭亮 譯,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
通過實作__init()__方法來初始化一個對象。每當建立一個對象,python會先建立一個空對象,然後調用該對象的__init()__函數。這個方法提供了對象内部變量以及其他一些一次性過程的初始化操作。
以下是關于一個card類層次結構定義的一些例子。這裡定義了一個基類和3個子類來描述card類的基本資訊。有兩個變量是參數直接指派的,另外兩個參數是通過初始化方法計算來完成初始化的。
在以上代碼段中,__init()__把公共初始化方法引入到了基類card中,這樣3個子類numbercard、acecard和facecard都能夠共享公共的初始化邏輯。
這是一個常見的多态設計,每個子類為_points()方法提供特有的實作。所有的子類有相同的方法名和屬性。這3個子類在使用時可以通過互換對象來更換實作方式。
如果隻是簡單地使用字母來定義花色,就可以使用如下的代碼段來建立card對象。
<code>cards = [ acecard('a', ''), numbercard('2',''), numbercard('3',''), ]</code>
這裡枚舉了card集合中的幾個card對象,把牌面值(rank)和花色(suit)作為參數傳入來執行個體化。從長遠來看,需要一個更智能的工廠函數來建立card對象,因為枚舉所有52張牌非常麻煩而且容易出錯。在介紹工廠函數前,先看一些其他的問題。