Python的__init__簡單解釋
以下內容為節選:
1 class Person: 2 def __init__(self, name, age): 3 self.name = name 4 self.agclass Person: 5 def __init__(self, name, age): 6 self.name = name 7 self.age = agee = age
class關鍵字後面跟類的名稱就定義了一個類,類的名稱可以任意,採用駝峰命名法,也即每個單詞的首字母大寫,如Book、Person、WildAnimal等
這裡的__init__
方法是一個特殊的方法(init是單詞初始化initialization的省略形式),在使用類建立物件之後被執行,用於給新建立的物件初始化屬性用。
初始化屬性的語句就是self.name = name
這種了,這一句不太好理解,我們把它改編一下就好理解了:
1 def __init__(self, n, a): 2 self.name = n 3 self.age = a
首先這是一個方法,方法的形參有self,n和a三個。
這個self,表示物件本身,誰呼叫,就表示誰
(這句話不好理解,先記住,我們後面分析)。
語法上,類中的方法的第一個引數都是self,這是和普通方法區別的地方。
這裡self.name = n
self.age = a
表示將外部傳來的n和a,賦值給了self物件的name和age屬性。這裡的n和a,其實叫什麼都可以,但是會有個問題:一般我們呼叫方法的時候,想自動提示一下或者檢視文件看一下這個方法的引數要求,如果形參名都是n、a、m、i這些,會讓人摸不著頭腦,不知道到底該傳入什麼樣的實參。因為這裡我們傳入實參是為了給屬性賦值,為了能見名知意,將形參的名字定義的跟屬性一致,呼叫者就知道該怎麼傳參了。
所以才有了上面的寫法。
再來說建立物件:
p = Person('小明', 20)
這句話就創建出來了一個具體的人,並且給這個人起了個名字叫小明,指定了小明的年齡為20,並且將小明這個物件賦值給了變數p,此時p就表示小明這個人(物件)
這就造出了一個人。
既然你是神,當然想造出什麼樣的人都可以,比如造出一個200歲的叫傑拉考的人:
p = Person('傑拉考', 200)
這句話後面的Person('傑拉考', 200)
用於創建出了一個物件(人),並且呼叫了init(self,name,age)方法完成了該人的屬性的初始化,傑拉考
賦值給了name
,200
賦值給了age
屬性。
那self
呢?self不需要傳參,上面我們說過,self,表示物件本身,誰呼叫,就表示誰
,此時的self就表示你Person('傑拉考', 200)
創造出來的那個物件,也即是p
。
也即,我們創造出了p,然後給p的屬性賦了值,此時p就表示擁有屬性值之後的那個人。
可以使用點.
來呼叫物件的屬性,比如輸出p的名字和年齡,完整程式碼為:
1 class Person: 2 def __init__(self, name, age): 3 self.name = name 4 self.age = age 5 p = Person('傑拉考', 200) 6 print(p.name) 7 print(p.age)
輸出結果:
傑拉考
200
接下來我們再在Person類中定義一個方法,用於自我介紹:
1 def desc(self): 2 print("我叫%s,今年%d歲" % (self.name, self.age))
在類的內部,訪問自己的屬性和方法,都需要通過self,self就是外部物件在類內部的表示,此時可以使用p呼叫該方法,完整程式碼如下:
1 class Person: 2 def __init__(self, name, age): 3 self.name = name 4 self.age = age 5 def desc(self): 6 print("我叫%s,今年%d歲" % (self.name, self.age)) 7 p = Person('傑拉考', 200) 8 # 呼叫自我介紹方法 desc方法中的self就是外部的這個p 9 p.desc()
輸出為:
我叫傑拉考,今年200歲
當前desc方法中的self,就是外部的那個物件p,如果我再定義了一個物件p2,那麼p2呼叫desc時,desc中的self就表示p2這個物件。正所謂:誰呼叫,就表示誰
轉載:
連結:https://www.zhihu.com/question/46973549/answer/293788116