1. 程式人生 > >Python-淺談類方法中的Self

Python-淺談類方法中的Self

背景

一入Python深似海,最近也不知怎滴。迷戀上了Python,感覺這玩意兒越看越有意思,本來是打算看完初級基本教程再來個總結的,誰知半路殺出個Self,使我不得不趕緊記錄一下此刻的小小感悟!哈哈,不喜勿怪!!

介紹

Python到底是啥玩意兒,網上是這樣解釋的:一種解釋型、面向物件、動態資料型別的高階程式設計語言。(PS:反正覺得計算機語言都是挺高階的)

緣由

在漫長的學習揣摩中,接觸到了Python中的類,一說到類肯定有類的屬性和方法,其中屬性好理解,但是這個方法(PS:習慣稱函式叫方法)有點讓人腦仁兒疼,特別是它的引數Self,為什麼呢?竊聽下文分解。

過程

  • 首先,Python中類的屬性和普通類的屬性沒什麼太大區別,都是例項化物件,然後呼叫唄!
  • 然後就是Python中類的方法和普通類的方法有個很大的差別就是:必須有一個額外的第一個引數名稱, 按照慣例它的名稱是 Self。(PS:也可以寫成其他名字)Self說是代表類的例項,而非類。如圖所示:執行結果 從執行結果可以很明顯的看出,self 代表的是類的例項,代表當前物件的地址。其中的Self這個引數不是我打進去的,是當我寫方法名的時候,編輯器預設推薦的寫法,難道真的是必要的嗎?接著看 執行結果 可以看到刪除了預設的Self也是可以的,編譯執行都正常,最後翻看文件才知道,這裡呼叫方法的時候,直譯器預設是這樣玩兒的:MyClass.fun(self),終於知道為什麼不傳也是可以的了,不過還是根據推薦的寫比較好,這裡僅僅談接一下是否可以省略!
  • 最後再來探究一下繼承關係裡Self的效果吧,請看效果圖: 傳入物件的結果: 傳入物件的結果 不傳物件的結果: 在這裡插入圖片描述 很明顯,self所代表的例項物件不一定就是它所在的類的物件,實際代表的是被傳入的類的物件例項。

結論

綜上所述,大致對Self有了一個淺顯的瞭解,基本上可以歸為一下幾點:

  • Self是可以不傳的,但是建議預設傳入
  • Self的名字並不是規定死的,官方推薦Self
  • Self在類繼承時,傳入的是哪個例項,就是那個傳入的例項,而不是指定義了Self的類的例項。