<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
__init__
是構造方法,誰呼叫,表示誰(更直觀的理解就是類的方法中,誰呼叫,表示誰,見下面第一個程式碼)!!並不是必選項,也就是說在類中,這個不是必須用的,那什麼場景需要用到,什麼場景不需要用到呢,下面會做說明!
下面程式碼是最基本的類定義程式碼:
class Person: def __init__(self, name, age): self.name = name #self.name,這裡的name並不是 def __init__裡面的name,這個name可以自定義,但=後面的name就是__init__裡面的name了 self.age = age def test(self): #誰呼叫表示誰,就是這種情況,這個test方法呼叫了這個類中init的name和age,也就是說這個類的name和age表示為test方法 print(self.name,self,age)
class關鍵字後面跟類的名稱就定義了一個類,類的名稱可以任意,採用駝峰命名法,也即每個單詞的首字母大寫,如Book、Person、WildAnimal等
這裡的__init__
方法是一個特殊的方法(init是單詞初始化initialization的省略形式),在使用類建立物件之後被執行,用於給新建立的物件初始化屬性用。
初始化屬性的語句就是self.name = name
這種了,這一句不太好理解,我們把它改編一下就好理解了:
def __init__(self, n, a): self.name = n 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就表示小明這個人(物件)
這就造出了一個人。
注:這裡的小明和20並不是任意創造的,而是在Person這個函數中定義了2個引數(name,age),所以這必須範例化2個引數!! 另外,在重複一下這個流程吧:定義類(class )-建立方法(物件)(def)——建立範例(繫結屬性)(p=類名)——傳參(有init的不需要單獨傳參)-呼叫
程式碼如下:
# 定義一個類,使用class關鍵字 class Student: pass # 暫時不賦值 #建立類的物件 stu1 = Student() # 建立Student類的一個範例 stu2 = Student() print(stu1,'自定義型別type:',type(stu1)) print(stu2,'自定義型別type:',type(stu2)) # 為物件繫結屬性 (注:需要先給類建立範例) stu1.name = 'ccx' stu1.age = 22 stu2.name = 'xgq' stu2.age = 23 stu2.sex = 'woman' # 呼叫 print('stu1的引數:',stu1.name,stu1.age) #列印stu1的引數 print('stu2的引數:',stu2.name,stu2.sex,stu2.age) # 列印stu2的引數
插入:這裡就是人們常常調侃的,程式設計師不需要女朋友,如果需要,就給自己建立一個物件,不,最少要建立10個物件!!! 物件就是傳的參
就是這樣:
#建立類 class GirlFriend : #建立方法 def __init__(self,num,name,age,features): #初始化引數 self.num=num self.name=name self.age=age self.features=features def MyGirlFriend(self): print('我的第',self.num,'個女朋友,名字叫',self.name,',她今年',self.age,'歲了,特徵是:',self.features,'!!!!',sep='') # 定義物件 gf1=GirlFriend(1,'劉亦菲',24,'漂亮的臉蛋性感的身材') gf2=GirlFriend(2,'楊冪',23,'有讓人陶醉的聲音') gf3=GirlFriend(3,'湯唯',24,'喜歡沒道理') #呼叫 gf1.MyGirlFriend() gf2.MyGirlFriend() gf3.MyGirlFriend()
這種構造方法,在建立物件時會自動呼叫, 不需要單獨呼叫該方法! 不建議這麼用
class ClassName(object): def __init__(self, name): # 必須要初始化值 self.name=name print('ClassName:',self.name,'in run') p=ClassName('xgq')
init只是用來初始化值,但都需要新定義方法來返回這個引數!!!
class ClassName(object): def __init__(self, name): self.name=name def run(self): print('ClassName_run:',self.name,'in run') p=ClassName('xgq') p.run()
#定義類 class Person: #定義方法 def test(self,name): print('name is :',self.name,'~!!!') #定義物件 p=Person() #傳參 p.name='ccx' #呼叫 p.test('xgq')
在執行結果中可以看出,用了init就需要在定義物件的時候就賦值,而不用init的話,是不需要再定義物件的時候就賦值,需要單獨傳參,但是因為在test中定義了name,所以在呼叫的時候,也需要傳一個引數,但如果不用init,在呼叫的時候傳參,是沒有任何意義的,因為類中的方法預設接受的引數是單獨定義的引數,而不是是呼叫的時候傳的參!!!
反正你需要知道的是,__init__是構造方法,在建立物件時會自動呼叫,而且構造方法(函數),不支援過載,如果需要給這個類定義引數,就需要用init,反正就不需要用!
下面我給一個 子類繼承父類別的方法,如果不用init你可以自行嘗試是什麼結果!!
#定義一個Person類,父類別(超類,基礎類別) class Person: def __init__(self,name): # 定義私有類 self.name = name def run(self):#定義一個類函數 print('person:'+ self.name+'正在奔跑啊啊啊') class Student(Person): #繼承自Person def __init__(self,name,set,age):# 定義私有類 #呼叫父類別的構造方法 # Person.__init__(name) # 方式一:直接指定父類別的構造方法 super().__init__(name)# 方式二:使用super(),推薦使用該方法 # 自己類中的構造方法且父類別中沒有的,直接定義即可 self.set = set self.age = age def study(self): #定義一個類函數 print('stadent:' + self.name + '正在學習。。。。') def show(self):#定義一個類函數 print('name:%s , set:%s,age:%s'%(self.name,self.set,self.age)) #可以自定義n個類函數 。。。 stu = Student('ccx','man',22) stu.run() #因為繼承了父類別,當然也可以直接呼叫父類別函數 stu.study() stu.show()
到此這篇關於一文搞懂python中的__init__的意思及使用場景的文章就介紹到這了,更多相關python中的__init__使用內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45