Python中的self通俗理解(自己理解的,自我感覺比官網解釋要容易懂)


在Python開發中,我們常常需要在類中加上self或者pycharm工具在類中定義方法的時候就自動幫你加上了self,這是為啥呢?

起初我也不是特別明白,不停的查資料,后來想了想,這種解釋感覺也行得通,所以就想寫下來,難免以后會忘記;

self,網上標准化的解釋是表示類的實例,其實這個還是好理解的,只是后來又說了一大堆啥不是代表類,代表this,繼承的時候能不能寫等等,我就亂了,然后自己總結了一下;

總結如下:

  1 因為Python是解釋性語言,而我們所說的Java和C都是編譯性語言,所以各語言的特點不一樣,所以也會有區別;首先來說一下和Java中this的區別,在我看來,self和this在用法是確實是一致的,都是表示這個類,但是有區別,舉個例子,在一個方法中,使用self和this是不一樣的,在Python方法中加入self,因為Python是解釋性語言,代碼是從上往下是一行行執行的,所以在執行的時候,這個方法並不知道它是屬於哪一個類的(換句話講是它只是類中的一個方法,但是它並不是知道它是屬於哪個類),所以加入self其實是告訴這個方法我是哪個類中的方法,所以要先用self,告訴這個方法,讓它知道它調用的是那一個類;而Java不一樣,對於編譯性語言來講,class類中不管是變量還是方法,全都是一次性打包完成的,所以就Java中的方法其實是知道它是屬於哪一個類的,這也是為啥在Java類中的方法不需要直接在第一個參數中寫this的原因;

代碼解釋:

class st(object):
    def __init__(self , name ,age):
        self.name = name
        self.age = age
    def na(self):
        print(self)
        print(self.age , self.name)
    def ag():
        print('dsdsds')
        

if __name__ == '__main__':
    t = st('caizhou'  , 23)
    t.na()
    st.ag()

結果:

 

 這里ag方法報錯了,但是能輸出結果,是不是很說明問題了?

Java就不寫了,感覺到這里也基本上證實了我的猜想了!這是第一點,也是最重要的一點;

  2 至於說繼承,大概說一下吧,繼承的時候就是如果是子類調用父類的方法,只要是實例化了子類的對象,self統統都是實例化的子類的self,就算是調用父類的方法,self也是子類的實例化對象;

代碼解釋:

class Pa:
    def pprt(self):
        print(self)
class Ch(Pa):
    def cprt(self):
        print(self)

c = Ch()
c.cprt()
c.pprt()
p = Pa()
p.pprt()

應該寫的比較明白了,我感覺self的用途就這些了,只需要記住啥時候用self,啥時候不用就行了

結果:

 

 到這里就講完了,以后想到啥了再補充,多指正,再見!!!!!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM