Python中面向物件-怎麼建立一個類
本節課,我們來學習,如何建立一個類, 也就是怎麼用python畫設計方案
先來看一下 前面課程裡出現過的 幾張設計方案
前面女媧造人的故事裡,女媧創造了6張設計方案
我們接下來根據那個故事的節奏,也來創造6張設計方案
建立類
建立 物種設計圖 的類
先來看第一張設計方案, 物種設計方案
這張設計圖,裡的東西,有四肢,還有個頭、身體
那麼我們設計的類如下:
class 物種設計方案: 頭 = 1 前肢 = 2 後肢 = 2 身體 = 1
要建立一個類, 和建立一個函式差不多,
先寫一個class,然後一個空格, 接著寫類的名字,
類的名字和變數名的命名規則一樣,通常類名建議駝峰命名法
也就是要像個駱駝
比如,
你的類名是 man 那麼應該寫成 Man
如果你的類名是 goodman 那麼你應該寫成 GoodMan
每個單詞的首字母用大寫,如果只有一個字母,首字母要大寫, 如果有多個單詞,每個單詞首字母都要大寫
這只是行業裡的一個約定,並沒有強制規定,你不遵守也可以
我這裡的例子,為了方便大家理解,會使用中文漢字
class 後面的 物種設計方案 就是我的類名, 類名後面一個冒號
接著換行,一個縮排,我這裡給這個類,增加了4個屬性,就像 宣告變數一樣
同樣為了便於大家理解,這裡的變數名我也用了中文漢字
這裡的 物種設計方案 就是我們建立的類的名字,簡稱類名
在類中的這幾個變數,就是這個類的屬性, 就和我們平時的變數是一樣的,但這裡的這幾個變數,歸屬於這個類, 就好比,我們大家都歸屬於中國
如此,我們就完成了, 物種設計方案的製作
建立 動物設計方案 的類
接下來,在這個基礎上,製作一個動物設計方案
class 動物設計方案(物種設計方案): def 吃東西(self): pass def 跑(self): pass def 叫(self): pass
你可以發現,這個類,和上個類十分相似,但也有一些區別,
比如,類名後面多了個括號,括號裡多了 物種設計方案
幾個字,
而且這個類裡面,居然寫了3個函式,這分別都是什麼含義呢?
類名後面的括號,寫了誰,就表示這個類要繼承誰, 我們這裡的 動物設計方案, 繼承了 物種設計方案,
所以, 物種設計方案,被寫在了, 動物設計方案後面的括號裡, 這個括號,就是用來表示宣告繼承關係的
這裡我們可以看出 動物設計方案的 父類 就是 物種設計方案
而 物種設計方案,在類名後面,直接就是問號,沒有括號,他沒有繼承別人嗎?
其實是有的, 在Python內部, 某個類沒有宣告繼承的話,Python會自動繼承object類, 關於object類是什麼, 我們以後會講, 暫時你只要記住
在Python裡,所有類都是object類的後代
那麼類裡面外面寫的這3個函式是啥意思呢? 這3個函式就是類的方法, 通常我們叫做類方法,
而且你應該也看到了, 類方法的第一個引數都是self,這個引數是必須要傳的,不能少, 但這個引數名字你可以改成別的, 比如 你可以改成, a, 或者別的
不過,為了便於大家理解, 行業裡,大家統一都寫的是self,所以,建議你也遵守這個規定
這幾個類函式,我們是留空的,寫了個pass語句,沒有填充內容,因為目前我們還不知道寫什麼好
建立 人類設計方案 的類
現在,讓我們基於 人類設計方案,創造一個類吧
class 人類設計方案(動物設計方案): type_name = "人" def 吃東西(self): print(self.type_name, ":開始用嘴巴吃東西") def 跑(self): print(self.type_name, ":用", self.後肢 ,"條 後肢跑") def 叫(self): print(self.type_name, ":啊啊啊")
我們給這個類,添加了一個屬性,type name, 值為 人
並且,我們把從父類那裡繼承來的3個方法, 進行了過載,也就是把從父類那繼承來的類方法裡面的程式碼,進行了修改,寫入了新的程式碼,這幾個類方法,父類中就寫了個pass,我們這裡改成了print語句,這裡面你可以寫任何程式碼,就和函式沒什麼兩樣
接著我們建立 狗類、貓類、鴨類
class 狗類設計方案(動物設計方案): type_name = "狗" def 吃東西(self): print(self.type_name, ":開始用嘴巴吃東西") def 跑(self): print(self.type_name, ":用", self.前肢+ self.後肢 ,"條腿 跑") def 叫(self): print(self.type_name, ":汪汪汪") class 貓類設計方案(動物設計方案): type_name = "貓" def 吃東西(self): print("開始用嘴巴吃東西") def 跑(self): print(self.type_name, ":用", self.前肢+ self.後肢 ,"條腿 跑") def 叫(self): print("喵喵喵") class 鴨類設計方案(動物設計方案): type_name = "鴨" def 吃東西(self): print("開始用嘴巴吃東西") def 跑(self): print(self.type_name, ":用",self.後肢 ,"條 後肢 跑") def 叫(self): print("嘎嘎嘎")
你可以看到,我們給這幾個類的類方法都填充了程式碼,
你應該已經發現了, 每個類,都有一個 type_name 屬性
而且,在類方法中,都用到了type_name 這個屬性,並且,前面還多出了一個 self.
self. 這是什麼意思呢? 這裡的self 就代表 這個類自己
比如,人類設計方案, 這個類中的self,就代表這個 [人類設計方案] ,我們這裡 列印 self.type_name
就表示 要列印, 人類設計方案 中的type_name,
同樣的道理, 在狗類設計方案中,列印 self.type_name ,就表示要訪問 狗類設計方案 的 type_name屬性
self 就代表當時那種情景下的自己
如果你還不理解不要緊,接下來的課程裡,我們會詳細的講解