在面向?qū)ο蟮某绦蛟O(shè)計(jì)過程中有兩個(gè)重要概念:類(class)和對象(object,也被稱為實(shí)例,instance),其中類是某一批對象的抽象,可以把類理解成某種概念;對象才是一個(gè)具體存在的實(shí)體。從這個(gè)意義上看,日常所說的人,其實(shí)都是人的對象,而不是人類。
Python 定義類的簡單語法如下:
class 類名: 執(zhí)行語句... 零個(gè)到多個(gè)類變量... 零個(gè)到多個(gè)方法...
類名只要是一個(gè)合法的標(biāo)識符即可,但這僅僅滿足的是 Python 的語法要求:如果從程序的可讀性方面來看,Python 的類名必須是由一個(gè)或多個(gè)有意義的單詞連綴而成的,每個(gè)單詞首字母大寫,其他字母全部小寫,單詞與單詞之間不要使用任何分隔符。
從上面定義來看,Python 的類定義有點(diǎn)像函數(shù)定義,都是以冒號(:)作為類體的開始,以統(tǒng)一縮進(jìn)的部分作為類體的。區(qū)別只是函數(shù)定義使用 def 關(guān)鍵字,而類定義則使用 class 關(guān)鍵字。
Python 的類定義由類頭(指 class 關(guān)鍵字和類名部分)和統(tǒng)一縮進(jìn)的類體構(gòu)成,在類體中最主要的兩個(gè)成員就是類變量和方法。如果不為類定義任何類變量和方法,那么這個(gè)類就相當(dāng)于一個(gè)空類,如果空類不需要其他可執(zhí)行語句,則可使用 pass 語句作為占位符。例如,如下類定義是允許的:
class Empty: pass
通常來說,空類沒有太大的實(shí)際意義。
類中各成員之間的定義順序沒有任何影響,各成員之間可以相互調(diào)用。
Python 類所包含的最重要的兩個(gè)成員就是變量和方法,其中類變量屬于類本身,用于定義該類本身所包含的狀態(tài)數(shù)據(jù):而實(shí)例變量則屬于該類的對象,用于定義對象所包含的狀態(tài)數(shù)據(jù):方法則用于定義該類的對象的行為或功能實(shí)現(xiàn)。
Python 是一門動(dòng)態(tài)語言,因此它的類所包含的類變量可以動(dòng)態(tài)增加或刪除(程序在類體中為新變量賦值就是增加類變量),程序也可在任何地方為已有的類增加變量;程序可通過 del 語句刪除己有類的類變量。
類似的是,Python 對象的實(shí)例變量也可以動(dòng)態(tài)增加或刪除(只要對新實(shí)例變量賦值就是增加實(shí)例變量),因此程序可以在任何地方為己有的對象增加實(shí)例變量;程序可通過 del 語句刪除已有對象的實(shí)例變量。
在類中定義的方法默認(rèn)是實(shí)例方法,定義實(shí)例方法的方法與定義函數(shù)的方法基本相同,只是實(shí)例方法的第一個(gè)參數(shù)會被綁定到方法的調(diào)用者(該類的實(shí)例),因此實(shí)例方法至少應(yīng)該定義一個(gè)參數(shù),該參數(shù)通常會被命名為 self。
注意:實(shí)例方法的第一個(gè)參數(shù)并不一定要叫 self,其實(shí)完全可以叫任意參數(shù)名,只是約定俗成地把該參數(shù)命名為 self,這樣具有最好的可讀性。
在實(shí)例方法中有一個(gè)特別的方法:__init__,這個(gè)方法被稱為構(gòu)造方法。構(gòu)造方法用于構(gòu)造該類的對象,Python 通過調(diào)用構(gòu)造方法返回該類的對象(無須使用 new)。
Python 中很多這種以雙下劃線開頭、雙下劃線結(jié)尾的方法,都具有特殊的意義,本教程后面還會詳細(xì)介紹這些特殊的方法。
構(gòu)造方法是一個(gè)類創(chuàng)建對象的根本途徑,因此 Python 還提供了一個(gè)功能:如果開發(fā)者沒有為該類定義任何構(gòu)造方法,那么 Python 會自動(dòng)為該類定義一個(gè)只包含一個(gè) self 參數(shù)的默認(rèn)的構(gòu)造方法。
下面程序?qū)⒍x一個(gè) Person 類:
class Person : '這是一個(gè)學(xué)習(xí)Python定義的一個(gè)Person類' # 下面定義了一個(gè)類變量 hair = 'black' def __init__(self, name = 'Charlie', age=8): # 下面為Person對象增加2個(gè)實(shí)例變量 self.name = name self.age = age # 下面定義了一個(gè)say方法 def say(self, content): print(content)
上面的 Person 類代碼定義了一個(gè)構(gòu)造方法,該構(gòu)造方法只是方法名比較特殊:__init__,該方法的第一個(gè)參數(shù)同樣是 self,被綁定到構(gòu)造方法初始化的對象。
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com