了解python里self有什么用?這個(gè)問題可能是我們?nèi)粘W(xué)習(xí)或工作經(jīng)常見到的。希望通過這個(gè)問題能讓你收獲頗深。下面是小編給大家?guī)淼膮⒖純?nèi)容,讓我們一起來看看吧!
瀘水網(wǎng)站制作公司哪家好,找成都創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站建設(shè)等網(wǎng)站項(xiàng)目制作,到程序開發(fā),運(yùn)營(yíng)維護(hù)。成都創(chuàng)新互聯(lián)成立與2013年到現(xiàn)在10年的時(shí)間,我們擁有了豐富的建站經(jīng)驗(yàn)和運(yùn)維經(jīng)驗(yàn),來保證我們的工作的順利進(jìn)行。專注于網(wǎng)站建設(shè)就選成都創(chuàng)新互聯(lián)。
首先我們要搞明白Python的類中為要什么要用到self這個(gè)單詞呢,為什么不用"zhangsan"、"lisi"這樣的名字呢,這可定有他的用意。查Google翻譯解釋:
self 名詞的解釋:自;自我;自己
那么問題來了,這里的自己指代的到底是誰,下面聽我詳細(xì)分解。
分析
測(cè)試代碼以一下這個(gè)代碼及其它的擴(kuò)充為基礎(chǔ),先貼代碼,為了好理解,別說了半天不知道我在說什么。
class A(): def song(one): print(one) def sing(self,one): print(one)
1、首先要搞清楚的一個(gè)問題 a=A()與a=A,這兩個(gè)賦值之間的區(qū)別
a=A() print(a) a=A print(a) print(A) 結(jié)果如下: <__main__.A object at 0x0000020A69C81780> <class '__main__.A'> <class '__main__.A'> 分析: a=A() 是有地址的,這說明他是一個(gè)實(shí)體,比如 int a 中的 a 一樣 a=A 是沒有地址的,發(fā)現(xiàn)他和A打印的結(jié)果一毛一樣,這說明他就是A,也就是一個(gè)類名, 等價(jià)于上一句中 int a 中的 int 那么也就是說下面這兩語句是等價(jià)的 b=A() 與 b=a() ------------------------------------------------------------------------ 通過上面的分析,我們知道,a=A()相當(dāng)于把 A 給實(shí)例化了,什么叫實(shí)例化呢,類比與 int a , int 什么都不能做,即 int 不能被賦值,不能進(jìn)行算術(shù)操作等等,但是 a 可以(其實(shí)這里的 A 與 int 是一樣的,追溯到C語言,類只不過是一種自定義的結(jié)構(gòu)變量而已,只不過功能更加強(qiáng)大)。 那具體怎么個(gè)實(shí)例發(fā)呢?
2、self 到底指代的是誰
class A(): def song(one): print(one) def sing(self,one): print(one) a=A() A.sing(a,"hello") #注意這條語句 a.sing("hello") 打印結(jié)果: hello hello ------------------------------- A.sing("hello") 錯(cuò)誤信息: TypeError: sing() missing 1 required positional argument: 'one' 提示沒有給 one 賦值 -------------------------------- a.song("hello") 錯(cuò)誤信息: TypeError: song() takes 1 positional argument but 2 were given 那么問題來了,多給了一個(gè)什么參數(shù),為什么會(huì)多給呢? -------------------------------- 把類A改一下 class A(): def song(one,two): #注意這里多給song了一個(gè)參數(shù) print(one) a.song("hello") //這里的參數(shù) "hello"賦給了 two print(a) 打印結(jié)果: <__main__.A object at 0x0000020A69C39CC0> <__main__.A object at 0x0000020A69C39CC0> 是不是很奇怪,為什么a.song("hello")返回的是 實(shí)例 a 的地址呢?
從這個(gè)例子中你就可以發(fā)現(xiàn),實(shí)際上 a.sing(“hello”) 等價(jià)于 A.sing(a,“hello”),而self就是實(shí)例 a 自己,而且你發(fā)現(xiàn) self ,也可以用別的單詞來代替。
通過這段分析,我們簡(jiǎn)單的知道了,類中的方法第一個(gè)參數(shù)必須是 self ,不然實(shí)例無法正確調(diào)用類中的方法,也就是說,如果方法中第一個(gè)參數(shù)不是 self(廣義的),那么這個(gè)方法是沒有任何價(jià)值的,因?yàn)閷?shí)例無法調(diào)用它,一個(gè)無法被調(diào)用的方法真不知道有什么用。
參數(shù)前面的 self
x=6 class A(): def sing(self): self.x=10 def mutl(self): y=10*x print(y) a=A() a.mutl()
這里先猜一下結(jié)果,到底會(huì)打印 60 呢,還是 100 呢?要弄清這個(gè)問題,就要先弄清 mutl() 中的 x 到底是哪一個(gè),先看結(jié)果在分析。
結(jié)果是:60
為什么不調(diào)用類內(nèi)部的 x 參數(shù)而跑去調(diào)用類外的 x 呢?還是那個(gè)問題,self 到底指代的是誰,self 就是 a 本身,那么問題就很明顯了,mutl() 方法中的 x 前面沒有加 self 所以他調(diào)用的不是實(shí)例(注意這里說的是實(shí)例,而不是類)自身的參數(shù)。
到這里我想你大概明白了,參數(shù)前面有self和沒self的區(qū)別了,簡(jiǎn)單說,帶self的參數(shù)是人家實(shí)例自身的,不帶self的,愛誰誰,實(shí)例不管。
感謝各位的閱讀!看完上述內(nèi)容,你們對(duì)python里self有什么用大概了解了嗎?希望文章內(nèi)容對(duì)大家有所幫助。如果想了解更多相關(guān)文章內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
新聞名稱:python里self有什么用
標(biāo)題URL:http://jinyejixie.com/article16/jpdjdg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信小程序、網(wǎng)站營(yíng)銷、品牌網(wǎng)站制作、營(yíng)銷型網(wǎng)站建設(shè)、ChatGPT、定制開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)