Python初學筆記之類(Class)和實例(Instance)

面向?qū)ο笞钪匾母拍罹褪穷悾–lass)和實例(Instance)收恢,必須牢記類是抽象的模板帖族,比如Student類,而實例是根據(jù)類創(chuàng)建出來的一個個具體的“對象”募判,每個對象都擁有相同的方法荡含,但各自的數(shù)據(jù)可能不同。

仍以Student類為例届垫,在Python中释液,定義類是通過class關(guān)鍵字:

class Student(object):
    pass

class后面緊接著是類名,即Student装处,類名通常是大寫開頭的單詞误债,緊接著是(object),表示該類是從哪個類繼承下來的妄迁,繼承的概念我們后面再講寝蹈,通常,如果沒有合適的繼承類登淘,就使用object類箫老,這是所有類最終都會繼承的類。

定義好了Student類黔州,就可以根據(jù)Student類創(chuàng)建出Student的實例耍鬓,創(chuàng)建實例是通過類名+()實現(xiàn)的:

>>> bart = Student()
>>> bart
<__main__.Student object at 0x10a67a590>
>>> Student
<class '__main__.Student'>

可以看到阔籽,變量bart指向的就是一個Student的實例,后面的0x10a67a590是內(nèi)存地址牲蜀,每個object的地址都不一樣笆制,而Student本身則是一個類。

可以自由地給一個實例變量綁定屬性涣达,比如在辆,給實例bart綁定一個name屬性:

>>> bart.name = 'Bart Simpson'
>>> bart.name
'Bart Simpson'

由于類可以起到模板的作用,因此峭判,可以在創(chuàng)建實例的時候开缎,把一些我們認為必須綁定的屬性強制填寫進去。通過定義一個特殊的__init__方法林螃,在創(chuàng)建實例的時候奕删,就把namescore等屬性綁上去:

class Student(object):

    def __init__(self, name, score):
        self.name = name
        self.score = score

注意:特殊方法“init”前后分別有兩個下劃線A迫稀M瓴小!

注意到__init__方法的第一個參數(shù)永遠是self横漏,表示創(chuàng)建的實例本身谨设,因此,在__init__方法內(nèi)部缎浇,就可以把各種屬性綁定到self扎拣,因為self就指向創(chuàng)建的實例本身。

有了__init__方法素跺,在創(chuàng)建實例的時候二蓝,就不能傳入空的參數(shù)了,必須傳入與__init__方法匹配的參數(shù)指厌,但self不需要傳刊愚,Python解釋器自己會把實例變量傳進去:

>>> bart = Student('Bart Simpson', 59)
>>> bart.name
'Bart Simpson'
>>> bart.score
59

和普通的函數(shù)相比,在類中定義的函數(shù)只有一點不同踩验,就是第一個參數(shù)永遠是實例變量self鸥诽,并且,調(diào)用時箕憾,不用傳遞該參數(shù)牡借。除此之外,類的方法和普通函數(shù)沒有什么區(qū)別袭异,所以钠龙,你仍然可以用默認參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)和命名關(guān)鍵字參數(shù)俊鱼。

數(shù)據(jù)封裝

面向?qū)ο缶幊痰囊粋€重要特點就是數(shù)據(jù)封裝。在上面的Student類中畅买,每個實例就擁有各自的namescore這些數(shù)據(jù)并闲。我們可以通過函數(shù)來訪問這些數(shù)據(jù),比如打印一個學生的成績:

>>> def print_score(std):
...     print('%s: %s' % (std.name, std.score))
...
>>> print_score(bart)
Bart Simpson: 59

但是谷羞,既然Student實例本身就擁有這些數(shù)據(jù)帝火,要訪問這些數(shù)據(jù),就沒有必要從外面的函數(shù)去訪問湃缎,可以直接在Student類的內(nèi)部定義訪問數(shù)據(jù)的函數(shù)犀填,這樣,就把“數(shù)據(jù)”給封裝起來了嗓违。這些封裝數(shù)據(jù)的函數(shù)是和Student類本身是關(guān)聯(lián)起來的九巡,我們稱之為類的方法:

class Student(object):

    def __init__(self, name, score):
        self.name = name
        self.score = score

    def print_score(self):
        print('%s: %s' % (self.name, self.score))

要定義一個方法,除了第一個參數(shù)是self外蹂季,其他和普通函數(shù)一樣冕广。要調(diào)用一個方法,只需要在實例變量上直接調(diào)用偿洁,除了self不用傳遞撒汉,其他參數(shù)正常傳入:

>>> bart.print_score()
Bart Simpson: 59

這樣一來,我們從外部看Student類涕滋,就只需要知道睬辐,創(chuàng)建實例需要給出namescore,而如何打印宾肺,都是在Student類的內(nèi)部定義的溯饵,這些數(shù)據(jù)和邏輯被“封裝”起來了,調(diào)用很容易爱榕,但卻不用知道內(nèi)部實現(xiàn)的細節(jié)瓣喊。

封裝的另一個好處是可以給Student類增加新的方法,比如get_grade

class Student(object):
    ...

    def get_grade(self):
        if self.score >= 90:
            return 'A'
        elif self.score >= 60:
            return 'B'
        else:
            return 'C'

同樣的黔酥,get_grade方法可以直接在實例變量上調(diào)用藻三,不需要知道內(nèi)部實現(xiàn)細節(jié).

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市跪者,隨后出現(xiàn)的幾起案子棵帽,更是在濱河造成了極大的恐慌,老刑警劉巖渣玲,帶你破解...
    沈念sama閱讀 216,591評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件逗概,死亡現(xiàn)場離奇詭異,居然都是意外死亡忘衍,警方通過查閱死者的電腦和手機逾苫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,448評論 3 392
  • 文/潘曉璐 我一進店門卿城,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人铅搓,你說我怎么就攤上這事瑟押。” “怎么了星掰?”我有些...
    開封第一講書人閱讀 162,823評論 0 353
  • 文/不壞的土叔 我叫張陵多望,是天一觀的道長。 經(jīng)常有香客問我氢烘,道長怀偷,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,204評論 1 292
  • 正文 為了忘掉前任播玖,我火速辦了婚禮椎工,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘黎棠。我一直安慰自己晋渺,他們只是感情好,可當我...
    茶點故事閱讀 67,228評論 6 388
  • 文/花漫 我一把揭開白布脓斩。 她就那樣靜靜地躺著木西,像睡著了一般。 火紅的嫁衣襯著肌膚如雪随静。 梳的紋絲不亂的頭發(fā)上八千,一...
    開封第一講書人閱讀 51,190評論 1 299
  • 那天,我揣著相機與錄音燎猛,去河邊找鬼恋捆。 笑死,一個胖子當著我的面吹牛重绷,可吹牛的內(nèi)容都是我干的沸停。 我是一名探鬼主播,決...
    沈念sama閱讀 40,078評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼昭卓,長吁一口氣:“原來是場噩夢啊……” “哼愤钾!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起候醒,我...
    開封第一講書人閱讀 38,923評論 0 274
  • 序言:老撾萬榮一對情侶失蹤能颁,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后倒淫,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體伙菊,經(jīng)...
    沈念sama閱讀 45,334評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,550評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了镜硕。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片运翼。...
    茶點故事閱讀 39,727評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖兴枯,靈堂內(nèi)的尸體忽然破棺而出南蹂,到底是詐尸還是另有隱情,我是刑警寧澤念恍,帶...
    沈念sama閱讀 35,428評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站晚顷,受9級特大地震影響峰伙,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜该默,卻給世界環(huán)境...
    茶點故事閱讀 41,022評論 3 326
  • 文/蒙蒙 一瞳氓、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧栓袖,春花似錦匣摘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,672評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至捧弃,卻和暖如春赠叼,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背违霞。 一陣腳步聲響...
    開封第一講書人閱讀 32,826評論 1 269
  • 我被黑心中介騙來泰國打工嘴办, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人买鸽。 一個月前我還...
    沈念sama閱讀 47,734評論 2 368
  • 正文 我出身青樓涧郊,卻偏偏與公主長得像,于是被迫代替她去往敵國和親眼五。 傳聞我的和親對象是個殘疾皇子妆艘,可洞房花燭夜當晚...
    茶點故事閱讀 44,619評論 2 354

推薦閱讀更多精彩內(nèi)容