1. Python里面的self,是誰???

        共 1837字,需瀏覽 4分鐘

         ·

        2022-03-17 02:27

        來源:Python大數(shù)據(jù)分析

        大家學Python面向?qū)ο蟮臅r候,總會遇到一個讓人難以理解的存在:self

        這個self到底是誰啊,為什么每個類實例方法都有一個參數(shù)self,它到底有什么作用呢?

        「先下結(jié)論:類實例化后,self即代表著實例(對象)本身」

        想要理解self有個最簡單的方法,就是你把self當做「實例(對象)身份證?!?/strong>

        Python的類不能直接使用,只有通過創(chuàng)建實例(對象)才能發(fā)揮它的功能,每個實例(對象)都是獨一無二的,它可以調(diào)用類的方法、屬性。類就像靈魂附體一樣,讓實例(對象)有了自己(self)的功能。

        初學者會發(fā)現(xiàn),類的方法(構(gòu)造方法和實例方法)中都會有一個固定參數(shù)self,其實這個參數(shù)就是代表著實例(對象)本身,就像是一個身份證,實例可以憑著身份證去調(diào)用類方法。

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

        上面是用類比的方法解釋了下self的含義,說到底self就是代表著實例本身,「當某個實例(對象)調(diào)用類方法時,該對象會把自身的引用作為第一個參數(shù)自動傳給該方法,而這第一個參數(shù)就是self?!?/strong>

        而且self只是約定俗成的寫法,你可以用任何其他名稱代替self,不會改變代碼含義,只不過我們一般不這樣做。

        為了更好的說明self的作用,我們來舉個例子,下面有一個Students類:

        class?Students:
        ????#?構(gòu)造方法
        ????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)
        ?

        結(jié)果打印出:studend_a

        ?

        再來個實例student_b

        studend_b?=?Students('studend_b')
        print(studend_b.name)
        ?

        結(jié)果打印出:studend_b

        ?

        可以看出,實例(對象)不一樣,打印出的結(jié)果也不一樣,當類被實例化后,self.name其實就等于實例(對象).name

        還是以剛剛的代碼為例,我們再來調(diào)用里面的實例方法,里面會打印出self,就能看得更加明顯了

        實例student_a:

        studend_a?=?Students('studend_a')
        print(studend_a.study(80))

        輸出結(jié)果:

        ?

        同學studend_a的考試分數(shù)是80 該實例對象的地址是<「main」.Students object at 0x00000129EB0F6A90>

        ?

        實例student_b:

        studend_b?=?Students('studend_b')
        print(studend_b.study(80))

        輸出結(jié)果:

        ?

        同學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)同樣的結(jié)果

        print(student_b)

        輸出:

        <__main__.Students object at 0x00000129EB0F6B00>

        這個時候是不是就清楚了,類實例化后,self即代表著實例(對象)本身


        往期推薦

        1、一個神器,大幅提升爬蟲爬取效率!
        2、代碼生成器用起來,是真的爽~
        3、警惕!英偉達代碼簽名證書泄露 黑客用來偽造驅(qū)動程序
        4、NNI — 微軟開源的一個自動幫你做機器學習調(diào)參的神器
        5、B站賣盲盒遭網(wǎng)友怒噴:抽中后2029年才發(fā)貨?

        點擊關注公眾號,閱讀更多精彩內(nèi)容
        瀏覽 33
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
            
            

                      • 88国产精品视频一区二区三区 | 国产刺激自拍 | 波多野结衣av在线观看 | 蜜桃av噜噜一区二区三区麻豆 | 精品韩国一区二区三区 |