輕松學(xué)會python面向?qū)ο蟮?1篇---靈魂拷問,self是誰

class Dog():
def __init__(self, _name, _age):
self.name = _name
self.age = _age
def eat_moon(self):
print(f"{self.name}吃月")
在類里定義方法時,總是每個方法都有一個self參數(shù),而且如果你的編輯器足夠智能,self是被自動添加的,不需要你動手。
那么這個self究竟是誰呢?如果你強(qiáng)行刪除掉這個參數(shù),程序就會報錯,代碼里出現(xiàn)紅色的錯誤提示:方法必須有一個參數(shù),通常叫self。
關(guān)于這個self,我教大家一個簡單的方法來識別它---誰調(diào)用該方法,self就是誰,下面用代碼來舉例子
dog1 = Dog('二哈', 4)
dog1.eat_moon() # 二哈吃月
代碼里,是對象實(shí)例dog1調(diào)用了eat_moon,那么dog1就是eat_moon方法里的self。print輸出的結(jié)果就是二哈吃月。
dog2 = Dog('老哈', 8)
dog2.eat_moon() # 老哈吃月
我又創(chuàng)建了一個dog2對象,dog2對象調(diào)用eat_moon方法,那么在eat_moon執(zhí)行過程中,傳入的self參數(shù)就是dog2,dog2.name的值是老哈。
在第10篇教程里,我已經(jīng)解釋了,dog1.eat_moon和dog2.eat_moon的內(nèi)存地址是相同的
print(id(dog1.eat_moon) == id(dog2.eat_moon)) # True
他們都是類里所定義的eat_moon函數(shù)的綁定,因此兩次調(diào)用,執(zhí)行的都是同一個方法,print語句輸出的結(jié)果不一樣,是因?yàn)槊看握{(diào)用時,傳入的self不同,誰調(diào)用,self就是誰。
評論
圖片
表情
