Python里面的self,是誰???
轉自:Python大數(shù)據(jù)分析
大家學Python面向對象的時候,總會遇到一個讓人難以理解的存在:self
這個self到底是誰啊,為什么每個類實例方法都有一個參數(shù)self,它到底有什么作用呢?
「先下結論:類實例化后,self即代表著實例(對象)本身」
想要理解self有個最簡單的方法,就是你把self當做「實例(對象)的身份證?!?/strong>
Python的類不能直接使用,只有通過創(chuàng)建實例(對象)才能發(fā)揮它的功能,每個實例(對象)都是獨一無二的,它可以調用類的方法、屬性。類就像靈魂附體一樣,讓實例(對象)有了自己(self)的功能。
初學者會發(fā)現(xiàn),類的方法(構造方法和實例方法)中都會有一個固定參數(shù)self,其實這個參數(shù)就是代表著實例(對象)本身,就像是一個身份證,實例可以憑著身份證去調用類方法。

類比人類,人類就是一個Python類,每個個體的人代表著實例(對象),而每個人的身份證代表的Python中self,每個人可以憑借身份證去上大學、坐高鐵、住酒店...(方法),而Python中的實例(對象)也可以憑著self去調用類的方法。

上面是用類比的方法解釋了下self的含義,說到底self就是代表著實例本身,「當某個實例(對象)調用類方法時,該對象會把自身的引用作為第一個參數(shù)自動傳給該方法,而這第一個參數(shù)就是self?!?/strong>
而且self只是約定俗成的寫法,你可以用任何其他名稱代替self,不會改變代碼含義,只不過我們一般不這樣做。
為了更好的說明self的作用,我們來舉個例子,下面有一個Students類:
class?Students:
????#?構造方法
????def?__init__(self,name):
????????self.name?=?name
????#?實例方法
????def?study(self,examination_results):
????????self.examination_results?=?examination_results
????????print("同學{}的考試分數(shù)是{}".format(self.name,self.examination_results))
????????print("該實例對象的地址是{}".format(self))
先來個實例student_a
studend_a?=?Students('studend_a')
print(studend_a.name)
?結果打印出:studend_a
?
再來個實例student_b
studend_b?=?Students('studend_b')
print(studend_b.name)
?結果打印出:studend_b
?
可以看出,實例(對象)不一樣,打印出的結果也不一樣,當類被實例化后,self.name其實就等于實例(對象).name
還是以剛剛的代碼為例,我們再來調用里面的實例方法,里面會打印出self,就能看得更加明顯了
實例student_a:
studend_a?=?Students('studend_a')
print(studend_a.study(80))
輸出結果:
?同學studend_a的考試分數(shù)是80 該實例對象的地址是<「main」.Students object at 0x00000129EB0F6A90>
?
實例student_b:
studend_b?=?Students('studend_b')
print(studend_b.study(80))
輸出結果:
?同學studend_b的考試分數(shù)是80 該實例對象的地址是<「main」.Students object at 0x00000129EB0F6B38>
?
大家能清楚看到兩個實例打印出的self是不一樣的,因為self代表著實例(對象)本身。
以實例student_b來說,打印self出現(xiàn)下面對象信息
<__main__.Students object at 0x00000129EB0F6B38>
如果再打印 student_b,會出現(xiàn)同樣的結果
print(student_b)
輸出:
<__main__.Students object at 0x00000129EB0F6B00>
這個時候是不是就清楚了,類實例化后,self即代表著實例(對象)本身
推薦閱讀:
入門:?最全的零基礎學Python的問題? |?零基礎學了8個月的Python??|?實戰(zhàn)項目?|學Python就是這條捷徑
干貨:爬取豆瓣短評,電影《后來的我們》?|?38年NBA最佳球員分析?|? ?從萬眾期待到口碑撲街!唐探3令人失望? |?笑看新倚天屠龍記?|?燈謎答題王?|用Python做個海量小姐姐素描圖?|碟中諜這么火,我用機器學習做個迷你推薦系統(tǒng)電影
趣味:彈球游戲? |?九宮格? |?漂亮的花?|?兩百行Python《天天酷跑》游戲!
AI:?會做詩的機器人?|?給圖片上色?|?預測收入?|?碟中諜這么火,我用機器學習做個迷你推薦系統(tǒng)電影
小工具:?Pdf轉Word,輕松搞定表格和水印!?|?一鍵把html網(wǎng)頁保存為pdf!|??再見PDF提取收費!?|?用90行代碼打造最強PDF轉換器,word、PPT、excel、markdown、html一鍵轉換?|?制作一款釘釘?shù)蛢r機票提示器!?|60行代碼做了一個語音壁紙切換器天天看小姐姐!|
年度爆款文案
6).30個Python奇淫技巧集?
點閱讀原文,看B站22個原創(chuàng)視頻!

