A.課程內(nèi)容
本節(jié)課學(xué)習(xí)非常重要的知識(shí)點(diǎn)——類(lèi)和對(duì)象噪猾。
B.知識(shí)點(diǎn)
(1)創(chuàng)建類(lèi)
(2)創(chuàng)建實(shí)例
(3)類(lèi)的繼承
C.用到的基本指令
(1)class
(2)def
(3)while Ture無(wú)限循環(huán)
(4)print()
(5)if-elif-else條件語(yǔ)句
(6)print()
(7)input()
C.類(lèi)和實(shí)例
面向?qū)ο缶幊绦枰褂谩邦?lèi)”和“對(duì)象”來(lái)實(shí)現(xiàn)涛癌,所以白魂,面向?qū)ο缶幊唐鹗季褪菍?duì)“類(lèi)”和“對(duì)象”的使用鬼悠。類(lèi)就是一個(gè)模板丹壕,模板里可以包含多個(gè)函數(shù)箩兽,函數(shù)里實(shí)現(xiàn)一些功能缺菌。對(duì)象則是根據(jù)模板創(chuàng)建的實(shí)例葫辐,通過(guò)實(shí)例對(duì)象可以執(zhí)行類(lèi)中的函數(shù)。Python中使用類(lèi)的順序是先創(chuàng)建(定義)類(lèi)伴郁,然后再創(chuàng)建類(lèi)的實(shí)例對(duì)象耿战,通過(guò)實(shí)例對(duì)象實(shí)現(xiàn)特定的功能。
1.創(chuàng)建類(lèi)
Python中焊傅,使用class語(yǔ)句來(lái)創(chuàng)建一個(gè)新類(lèi)昆箕,class之后為類(lèi)的名稱(chēng)并加括號(hào),最后以冒號(hào)(:)結(jié)尾租冠,并以統(tǒng)一縮進(jìn)部分作為類(lèi)體鹏倘。如下圖:
(1)定義一個(gè)名為Student的類(lèi)。在Python中顽爹,類(lèi)名的首字母應(yīng)該大寫(xiě)纤泵,其他字母全部小寫(xiě)。
(2)類(lèi)中的函數(shù)稱(chēng)為方法:除調(diào)用方式不同外镜粤,之前學(xué)習(xí)的有關(guān)函數(shù)的知識(shí)都適用于此方法捏题。“init()”是一個(gè)特殊的方法肉渴,被成為類(lèi)的構(gòu)造函數(shù)或初始化方法公荧,它的名稱(chēng)中開(kāi)頭和末尾各有兩個(gè)下劃線(xiàn),這是一種約定同规。每當(dāng)你根據(jù)Student類(lèi)創(chuàng)建新實(shí)例時(shí)循狰,Python都會(huì)在自動(dòng)運(yùn)行“init()”方法。self券勺、name和score為init()方法的3個(gè)形參绪钥。在這個(gè)方法定義中,self必不可少关炼,還必須位于其他形參的前面程腹。為什么必須包含self呢?因?yàn)檎{(diào)用“init()”方法來(lái)創(chuàng)建Student實(shí)例時(shí)儒拂,將自動(dòng)傳入實(shí)參self寸潦。每個(gè)與類(lèi)相關(guān)聯(lián)的方法調(diào)用都自動(dòng)傳遞實(shí)參self色鸳,它是一個(gè)指向?qū)嵗旧淼囊茫寣?shí)例能訪(fǎng)問(wèn)類(lèi)中的引用和方法见转。因此調(diào)用時(shí)命雀,不用給self傳入?yún)?shù),只需給最后面兩個(gè)形參(name和score)傳入值即可池户。
self.name和self.score這兩個(gè)變量前面都有前綴self咏雌。以self為前綴的變量都可供類(lèi)中的所有方法使用凡怎,我們還可以通過(guò)類(lèi)的任何實(shí)例來(lái)訪(fǎng)問(wèn)這些變量校焦,self.name=name獲取存儲(chǔ)在形參name中的值,并將其存儲(chǔ)到變量name中统倒,然后該變量被關(guān)聯(lián)到當(dāng)前創(chuàng)建的實(shí)例寨典。self.score=score作用類(lèi)似。另外房匆,可通過(guò)實(shí)例訪(fǎng)問(wèn)的這兩個(gè)變量也稱(chēng)為屬性耸成。
2.創(chuàng)建實(shí)例
使用class語(yǔ)句只能創(chuàng)建一個(gè)類(lèi),而無(wú)法創(chuàng)建類(lèi)的對(duì)象浴鸿,因此要想使用已創(chuàng)建好的類(lèi)井氢,還需要手動(dòng)創(chuàng)建類(lèi)的對(duì)象,創(chuàng)建類(lèi)的過(guò)程又稱(chēng)為類(lèi)的實(shí)例化岳链。下面創(chuàng)建一個(gè)表示特點(diǎn)學(xué)生的實(shí)例花竞,如下圖:3.繼承
繼承就是在已有類(lèi)的基礎(chǔ)上創(chuàng)建新的類(lèi)的過(guò)程,如果你要編寫(xiě)一個(gè)類(lèi)是另一個(gè)類(lèi)的特殊版本掸哑,可使用繼承约急。一個(gè)類(lèi)繼承另一個(gè)類(lèi)時(shí),它將自動(dòng)獲得另一個(gè)類(lèi)的所有屬性和方法苗分;原有的類(lèi)稱(chēng)為父類(lèi)厌蔽,而新的類(lèi)稱(chēng)為子類(lèi)。子類(lèi)繼承了父類(lèi)的所有屬性和方法摔癣,同時(shí)還可以定義自己的屬性和方法奴饮。
(1)創(chuàng)建子類(lèi)
(2)給子類(lèi)定義屬性和方法
子類(lèi)除了繼承父類(lèi)的屬性和方法外粘捎,還可以再添加新的屬性和方法薇缅,如下圖所示:
(3)方法重寫(xiě)
4.將類(lèi)存儲(chǔ)在模塊中
在我們編寫(xiě)程序時(shí)泳桦,有些類(lèi)可能很長(zhǎng)汤徽,為了使程序文件盡可能整潔,Python允許將類(lèi)存儲(chǔ)在模塊中灸撰,然后在主程序中導(dǎo)入所需要的模塊谒府。下面我們將以下內(nèi)容保存到game.py文件中。5.導(dǎo)入模塊中的類(lèi)
我們?cè)賱?chuàng)建另一個(gè)文件game_characters.py來(lái)導(dǎo)入Game類(lèi)并創(chuàng)建其實(shí)例浮毯,如下圖:上圖中的程序完疫,只允許調(diào)用Game類(lèi)中的方法,而不能調(diào)用子類(lèi)中的方法债蓝,如果想父類(lèi)和子類(lèi)的方法一起調(diào)用就需要將導(dǎo)入語(yǔ)句修改一下壳鹤,如下圖:
6.在一個(gè)模塊中導(dǎo)入另一個(gè)模塊
如果父類(lèi)和子類(lèi)分別保存在兩個(gè)模塊中,想從保存子類(lèi)的模塊中調(diào)用另一個(gè)模塊中父類(lèi)的方法饰迹,可以使用導(dǎo)入模塊的方法來(lái)實(shí)現(xiàn)芳誓。如下圖,我們新建一個(gè)名為game2.py的模塊啊鸭,在這個(gè)模塊中新建了一個(gè)Extendgame2的類(lèi)锹淌,它是之前建立的Game類(lèi)的子類(lèi)。接下來(lái)再創(chuàng)建一個(gè)名為game_character2.py的模塊赠制,用來(lái)創(chuàng)建game2.py模塊中Extendgame2子類(lèi)的實(shí)例赂摆,如下圖所示: