python的self理解
self只會在類中定義函式時用到,定義函式時,一般預設把第一個引數寫成self,這個self接收的實參是什麼呢,其實一個類物件例項,那麼這個self引數其實也就是一個變數, 只是這個變數指向類例項, 為什麼我們通過例項呼叫類方法的時候不需要給第一個引數傳值呢?是因為python直譯器會在呼叫的時候把呼叫的類例項傳遞給方法。
下面通過一段程式碼來解釋
#coding=utf-8
class People():
def __init__(self,name,height,weight):
self.name =name
self.height =height
self.weight = weight
def get_name(aaa): #類裡面定義方法的時候第一個引數可以不是self,但是python直譯器會把第一個引數當做類例項
return aaa.name
def get_height(self): #self代表的類例項本身,可以看做一個類物件變數
return self.height
p = People("zhangsan",182,60)
name = p.get_name()
print("name=",name)
height = p.get_height() #等價於 height = People.get_heght(p)
print("height=",height)
height1 = People.get_height(p) #這個時候給類函式呼叫顯示給類方法傳遞了類例項
print("height1=",height1)
執行結果:
可以很明顯的看到 類裡面每一個方法定義的時候,第一個引數都指的是類例項,這個名字大家約定俗成是self, 但是也可以取其他名字, 而且類例項呼叫的方法時候不需要給第一個引數傳遞值。