python面向?qū)ο笞钪匾母拍罹褪穷?lèi)(Class)和實(shí)例(Instance),必須牢記類(lèi)是抽象的模板,比如Student類(lèi),而實(shí)例是根據(jù)類(lèi)創(chuàng)建出來(lái)的一
個(gè)個(gè)具體的“對(duì)象”,每個(gè)對(duì)象都擁有相同的方法,但各自的數(shù)據(jù)可能不同。
仍以Student類(lèi)為例,在Python中,定義類(lèi)是通過(guò)class關(guān)鍵字:
classStudent(object):
pass
class后面緊接著是類(lèi)名,即Student,類(lèi)名通常是大寫(xiě)開(kāi)頭的單詞,緊接著是(object),表示該類(lèi)是從哪個(gè)類(lèi)繼承下來(lái)的,繼承的概念我
們后面再講,通常,如果沒(méi)有合適的繼承類(lèi),就使用object類(lèi),這是所有類(lèi)最終都會(huì)繼承的類(lèi)。
定義好了Student類(lèi),就可以根據(jù)Student類(lèi)創(chuàng)建出Student的實(shí)例,創(chuàng)建實(shí)例是通過(guò)類(lèi)名+()實(shí)現(xiàn)的:
>>>bart=Student()
>>>bart
<__main__.Studentobjectat0x10a67a590>
>>>Student
可以看到,變量bart指向的就是一個(gè)Student的實(shí)例,后面的0x10a67a590是內(nèi)存地址,每個(gè)object的地址都不一樣,而Student本身則是一個(gè)類(lèi)。
可以自由地給一個(gè)實(shí)例變量綁定屬性,比如,給實(shí)例bart綁定一個(gè)name屬性:
>>>bart.name='BartSimpson'
>>>bart.name
'BartSimpson'
由于類(lèi)可以起到模板的作用,因此,可以在創(chuàng)建實(shí)例的時(shí)候,把一些我們認(rèn)為必須綁定的屬性強(qiáng)制填寫(xiě)進(jìn)去。通過(guò)定義一個(gè)特殊的__init__方法,在創(chuàng)建實(shí)例的時(shí)候,就把name,score等屬性綁上去:
classStudent(object):
def__init__(self,name,score):
self.name=name
self.score=score
注意到__init__方法的第一個(gè)參數(shù)永遠(yuǎn)是self,表示創(chuàng)建的實(shí)例本身,因此,在__init__方法內(nèi)部,就可以把各種屬性綁定到self,因?yàn)閟elf
就指向創(chuàng)建的實(shí)例本身。
有了__init__方法,在創(chuàng)建實(shí)例的時(shí)候,就不能傳入空的參數(shù)了,必須傳入與__init__方法匹配的參數(shù),但self不需要傳,Python解釋器自己會(huì)把實(shí)例變量傳進(jìn)去:
>>>bart=Student('BartSimpson',59)
>>>bart.name
'BartSimpson'
>>>bart.score
59
以上內(nèi)容為大家介紹了python類(lèi)對(duì)象和實(shí)例對(duì)象是一樣的嗎?希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。