python中calss(類)的使用,類的教程,類中的函數(shù)怎么調(diào)用。
我們先來看看這個(gè)代碼
class?Computer: ????screen?=?True ????def?start(self): ????????print('電腦正在開機(jī)中……')my_computer?=?Computer()#實(shí)例化類print(my_computer.screen)#打印類中的屬性值my_computer.start()#啟動(dòng)類中的方法12345678910
想要調(diào)用他語法是實(shí)例名.屬性和實(shí)例名.方法
所以說最后我們打印出的內(nèi)容是
True電腦正在開機(jī)中……12
來看看怎么才能使用類中的值:
my_computer.screen
實(shí)例名.屬性
這樣就可以調(diào)用類中的屬性了
my_computer.start()
實(shí)例名.方法
這樣就可以啟動(dòng)類中的函數(shù)
看到這里很多人也明白怎么使用類了,可是發(fā)現(xiàn)類中函數(shù)有一個(gè)self參數(shù)這個(gè)參數(shù)有什么作用呢?
接下來我們看
class?Chinese: ????name?=?'小張'??#?類屬性name ????def?say(self,?someone):??#?帶有兩個(gè)參數(shù)的方法 ????????print(someone?+?'是中國(guó)人')person?=?Chinese()print(person.name)person.say('小張')?12345678910
輸出的結(jié)果是:
小張 小張是中國(guó)人12
self調(diào)用時(shí)要忽略,'小張’傳給參數(shù)someone
為什么忽略self,因?yàn)閟elf會(huì)接收實(shí)例化過程中傳入的數(shù)據(jù),當(dāng)實(shí)例對(duì)象創(chuàng)建后,實(shí)例便會(huì)代替 self,self 是所有實(shí)例的替身,“替身”是什么意思呢?就如上面這個(gè)代碼一樣,傳參直接給了someone沒有給self,因?yàn)樗缓雎粤?,但是他是存在的,因?yàn)闆]有他,函數(shù)就不是實(shí)例化中的函數(shù),所以大家只要記得在類中函數(shù)添加上self就行了。
self總結(jié),self就是實(shí)例化類的意思,傳參時(shí)可以忽略。
我們接著走,細(xì)心的同學(xué)會(huì)發(fā)現(xiàn),我們傳的參數(shù)小張給someone,然后再打印出 小張是中國(guó)人,其實(shí)我們沒必要這么麻煩,直接看類的屬性中有小張的參數(shù)值,直接調(diào)用就好了
然后你們就會(huì)想到
class?Chinese: ????name?=?'小張'??#?類屬性name ????def?say(self):??#?帶有兩個(gè)參數(shù)的方法 ????????print(name?+?'是中國(guó)人')person?=?Chinese()print(person.name)person.say()?12345678910
打印出來的結(jié)果
Traceback?(most?recent?call?last): ??File?"one.py",?line?10,?in?
報(bào)錯(cuò)找到不到name,為什么呢?我上面不是寫了嘛?因?yàn)轭惱锩嬲{(diào)用屬性需要先加實(shí)例化,那是不是寫Chinese().name是的,這樣寫沒有錯(cuò),但是我們沒必要這樣寫呢,我們上面說過self就是類的實(shí)例化,所以我們寫成self.name?就可以調(diào)用屬性了,
小總結(jié):類的屬性調(diào)用前面加self.屬性名就可以了。self在類中就是Chinese(),我們完全可以把全部的self寫成Chinese(),有的人類的名字很長(zhǎng),寫代碼時(shí)很不有好所以出現(xiàn)了self,帶代替的他的存在,傳參時(shí)也不會(huì)傳給他。
有同學(xué)又問,如果類里面有兩個(gè)方法(函數(shù))這么辦?我下一個(gè)方法(函數(shù))要調(diào)用上一個(gè)方法(函數(shù))這么調(diào)用,同理看下面的代碼
class?Chinese: ????def?greeting(self): ????????print('很高興遇見你') ????def?say(self): ????????self.greeting()? ????????print('我來自中國(guó)')person?=?Chinese()#?創(chuàng)建實(shí)例personperson.say()#?調(diào)用say()方法?12345678910111213
我們只要在前面加上一個(gè)self(實(shí)例)就可以了。大家可以復(fù)制代碼到編譯器看看。
綜上,所以我們說self代表的是類的實(shí)例本身,方便數(shù)據(jù)的流轉(zhuǎn)。對(duì)此,我們需要記住兩點(diǎn):
第一點(diǎn):只要在類中用def創(chuàng)建方法時(shí),就必須把第一個(gè)參數(shù)位置留給 self,并在調(diào)用方法時(shí)忽略它(不用給self傳參)。
第二點(diǎn):當(dāng)在類的方法內(nèi)部想調(diào)用類屬性或其他方法時(shí),就要采用self.屬性名或self.方法名的格式。
接下來我們說說類中的初始化
定義初始化方法的格式是def?init(self),是由init加左右兩邊的【雙】下劃線組成( initialize “初始化”的縮寫)。
初始化方法的作用在于:實(shí)例對(duì)象創(chuàng)建時(shí),該方法內(nèi)的代碼無須調(diào)用就會(huì)自動(dòng)運(yùn)行。
我們看下面的代碼
class?Chinese: ????def?__init__(self):? ????????print('很高興遇見你,我是初始化方法')person?=?Chinese()123456
運(yùn)行出來的結(jié)果
很高興遇見你,我是初始化方法1
少了一個(gè)調(diào)用的函數(shù) person.__ init __()
為什么呢?因?yàn)樗麜r(shí)初始化,只要類的實(shí)例化創(chuàng)建出來就會(huì)自動(dòng)運(yùn)行,好比方說,你打開電腦,他會(huì)自動(dòng)加載C盤上的系統(tǒng)文件,直到你打開電腦桌面為止,剩下的才是你操作的內(nèi)容,前面打開電腦的過程都叫做類的初始化,自動(dòng)運(yùn)行了。
這時(shí)候有同學(xué)問,那我再初始化寫一些代碼賦值給函數(shù),能調(diào)用嗎?
在初始化中所有代碼都是可以調(diào)用的,同理,在前面加一個(gè)self看下面的例子
class?Chinese: ????def?__init__?(self): ????????self.mouth?=?1??#?self.不能丟 ????????self.eye?=?2 ???? ????def?body(self): ????????print('我有%s張嘴巴'?%?self.mouth) ????????print('我有%s只眼睛'?%?self.eye)person?=?Chinese()person.body()1234567891011
運(yùn)行出來的結(jié)果就是
我有1張嘴巴 我有2只眼睛
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實(shí)的內(nèi)容,請(qǐng)聯(lián)系我們jiasou666@gmail.com 處理,核實(shí)后本網(wǎng)站將在24小時(shí)內(nèi)刪除侵權(quán)內(nèi)容。