在類裡面,所有執行個體方法都需要加 self 參數,且排在第一個,有且僅有一個
在類中定義的方法,第一個參數 self 指向調用該方法的執行個體對象,在方法中通過 self.屬性 這樣的形式通路對象的執行個體屬性
其實并不是哦
Python 隻是規定,無論是構造方法還是執行個體方法,最少要包含一個參數,并沒有規定該參數的具體名稱
之是以将其命名為 self,隻是約定俗成的一種習慣,遵守這個約定,可以使我們編寫的代碼具有更好的可讀性,大家一看到 self,就知道它的作用
你想叫 polo 也可以
隻是可讀性很差
如果把類比作造房子的圖紙
類執行個體化後的對象是真正可以住的房子
根據一張圖紙(類),可以設計出成千上萬的房子(執行個體對象)
每個房子長相都是類似的(都有相同的執行個體屬性和執行個體方法),但它們都有各自的主人
如何區分不同的房子:通過 self 參數,可以保證每個房子的主任僅能進入自己的房子(每個執行個體對象隻能調用自己的執行個體屬性和執行個體方法)
一個類可以産生多個執行個體對象,當某個執行個體對象調用執行個體方法,該對象會把自身的引用作為第一個參數自動傳遞給該方法
換句話說:Python 會自動将執行個體方法的第一個參數指向調用該方法的對象
這樣,Python 解釋器就知道到底要執行哪個對象的執行個體方法了
調用執行個體方法的時候,不需要手動為第一個參數傳值
很明顯,self 存的就是調用該執行個體方法的執行個體對象的引用
是以!誰調用執行個體方法,self 就是誰!