《從python開始學(xué)編程》第4章

目錄

1.類和對(duì)象
2.子類
3.python內(nèi)置的類
4.學(xué)過的對(duì)象



1.類和對(duì)象

類和對(duì)象不僅可以跟函數(shù)和模塊一樣能提高程序的可復(fù)用性,它們還能加強(qiáng)程序模擬真實(shí)世界的能力。比如說鳥類,它們的共同屬性是有羽毛,通過產(chǎn)卵生育后代……這樣,我們就可以通過總結(jié)各種相同的屬性來描述這個(gè)“類”,在python中用class來定義一個(gè)類

可以定義多個(gè)相同屬性

我們除了用數(shù)據(jù)性的屬性來分辨類別外,還可以根據(jù)這類東西的行為來分。比如說鳥會(huì)叫,這樣就和其它類別分開了,這些行為屬性一般通過在類的內(nèi)部定義函數(shù)來說明。

對(duì)象從類里面產(chǎn)生,我們可以定義這個(gè)對(duì)象,比如定義一只小雞summer,它屬于鳥類,可以表示為summer = Bird(),這樣,小雞summer就可以引用類的屬性了(形如object.attribute),比如

調(diào)用時(shí)不需要對(duì)self傳入數(shù)據(jù)

為了將個(gè)體與同類別的其它個(gè)體區(qū)別開,我們還需要通過self來操作對(duì)象的屬性,比如小雞的顏色是黃色的,其它的鳥類個(gè)體并不一定是黃色的

由于對(duì)象屬性依賴于self,所以對(duì)象屬性沒辦法像類屬性一樣直接賦初值。但是python提供了初始化對(duì)象屬性的方法:魔法方法(Magic Method)。如__init__()、__add__()、__dict__()等。python會(huì)以特定的方式來處理各個(gè)特殊的方法。對(duì)于類的 __init__()方法,Python會(huì)在每次創(chuàng)建對(duì)象時(shí)自動(dòng)調(diào)用。因此,我們可以在 __init__()方法內(nèi)部來初始化對(duì)象屬性:

上面代碼表示,當(dāng)創(chuàng)建對(duì)象summer時(shí),_int_()方法就會(huì)被調(diào)用,它會(huì)設(shè)置sound這個(gè)對(duì)象的屬性,然后通過chirp()調(diào)用。

除了操作對(duì)象屬性外,self還有另一個(gè)宮嗯,就是能讓我們?cè)谝粋€(gè)方法 內(nèi)部調(diào)用同一類的其他方法,比如:

在chirp_repeat()中self調(diào)用了chirp()


2.子類

類別還可以分成各個(gè)子類,比如鳥類可以分成雞和天鵝,我們通過繼承(Inheritance)來達(dá)這個(gè)概念。我們可以用class 雞類.(鳥類)這種方法定義子類,子類下面可以跟定義父類一樣定義屬性。這樣,雞類就繼承了鳥類的屬性,我們可以通過繼承來減少程序中的重復(fù)信息和重復(fù)語句。

通過繼承,可以在子類中增加父類不存在的屬性,從而可以加強(qiáng)子類的功能。此外,我們還可以在子類中替換父類已經(jīng)存在的屬性,操作時(shí)只需要在子類中重新定義父類中的屬性就可,比如鳥類(父類)中的叫聲定義是“jijiji”,可以在雞類(子類)中定義叫聲為“gegege”,這樣父類中的方法就被子類中的同名屬性覆蓋掉了。

如果想同時(shí)利用父類和子類中同名的屬性方法,可以使用super關(guān)鍵字在子類中調(diào)用父類中被覆蓋的方法,比如:

調(diào)用super的語句可以出現(xiàn)在子類方法的第一句,也可以出現(xiàn)在子類方法的任意其他位置?


3.python內(nèi)置的類

我們之前學(xué)過的列表、元祖、字典等,都是python內(nèi)置的類,用type就可以知道類的名稱,用dir()可以查詢類或者對(duì)象的所有屬性,用help可以顯示類的說明文檔(制作說明文檔與在函數(shù)中的做法一樣)。通過這些方法,我們可以知道類中“隱藏的技能”,如在列表a = [1,2,3,4,5,9.0,:"Good",-1,True,False,"Bye"]中,

元祖的技能與列表類似,但是元祖不能改變其內(nèi)容,因此只能進(jìn)行查詢操作,即count和index。字符串是特殊的元祖,可以執(zhí)行元祖的操作,此外字符串可以通過刪除原有字符串再建立新的字符串的方法來改變字符串的內(nèi)容(并沒有違背元祖的不可變性)。下面總結(jié)了字符串對(duì)象的方法。str為一個(gè)字符串,sub為str的一個(gè)子字符串。s為一個(gè)序列,它的元素都是字符串。width為一個(gè)整數(shù),用于說明新生成字符串的寬度。這些方法經(jīng)常用于字符串的處理。

同理,詞典的用法也相類似,我們還可以通過詞典的keys()方法,來循環(huán)遍歷每個(gè)元素的鍵、通過values()方法,可以遍歷每個(gè)元素的值或者用items方法,直接遍歷每個(gè)元素、也可以用clear()方法,清空整個(gè)詞典


4.學(xué)過的對(duì)象

python中的許多語法結(jié)構(gòu)都是由對(duì)象實(shí)現(xiàn)的,循環(huán)、函數(shù)、模塊異常等都是我們學(xué)過的對(duì)象。
對(duì)于循環(huán)對(duì)象,它包含了一個(gè)_next_()方法,循環(huán)的過程就是不斷調(diào)用_next_(),直到StopIteration出現(xiàn)時(shí)_next_()停止調(diào)用。
對(duì)于函數(shù)對(duì)象,它包含了一個(gè)__call__()方法,任何一個(gè)有__call__() 特殊方法的對(duì)象都被當(dāng)作是函數(shù),其用法與調(diào)用類的屬性相似。
對(duì)于模塊對(duì)象,如time模塊就是一個(gè)對(duì)象,我們可以用import引入模塊對(duì)象的屬性,如from time import sleep就可以引入sleep的屬性,或者直接執(zhí)行from time import*將模塊的所有屬性引入,又或者通過對(duì)象.屬性(time.sleep())的方法調(diào)用。
對(duì)于異常對(duì)象,異常處理的try結(jié)構(gòu)就是用來捕捉異常對(duì)象。利用except… as…的語法,我們?cè)趀xcept結(jié)果中用e來代表捕獲到的類型對(duì)象。關(guān)鍵字except直接跟隨的ZeroDivisionError實(shí)際上是異常對(duì)象的類。



代碼見碼云:zun: happy - 碼云 Gitee.com

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容