一文帶你弄懂Python3中的def?__init__
前言
在學(xué)習(xí)python-100-days時(shí),在面向?qū)ο缶幊袒A(chǔ)的那一塊,封裝一個(gè)class時(shí),突然出現(xiàn)def __init__
的方法,剛開(kāi)始時(shí),對(duì)他的理解很模糊,為什么定義一個(gè)類(lèi)需要用到def __init__
。
于是翻找了一些資料,大概就是兩種定義方式如下:
第一種定義方式如下:
class Student(object): # __init__是一個(gè)特殊方法用于在創(chuàng)建對(duì)象時(shí)進(jìn)行初始化操作 # 通過(guò)這個(gè)方法我們可以為學(xué)生對(duì)象綁定name和age兩個(gè)屬性 def __init__(self, name, age): self.name = name self.age = age
上面這一種,是在學(xué)習(xí)python-100-days時(shí),里面的一種定義方式。里面是包含兩個(gè)參數(shù) name
和 age
。在實(shí)例的時(shí)候,必須要傳入這兩個(gè)參數(shù)的值進(jìn)去。
stu = Student() # 報(bào)錯(cuò)
如果上面直接實(shí)例它的話(huà)就會(huì)報(bào)錯(cuò):TypeError missing 2 required positional arguments: 'name' and 'age'
正常情況下,我們應(yīng)該傳入?yún)?shù):
stu = Student('大冰', 19) # 正常實(shí)例
然后我們可以利用__dict__
方法查看對(duì)象的屬性。
print(stu.__dict__) # 打印出: {'name': '大冰', 'age': 19}
或者我們可以直接給__init__
方法設(shè)置一個(gè)默認(rèn)參數(shù),然后直接實(shí)例就不會(huì)報(bào)錯(cuò)了。
def __init__(self, name = '周星星', age = 12): self.name = name self.age = age stu = Student() # 不會(huì)報(bào)錯(cuò),正常實(shí)例
第二種定義方式如下:
class Student(object): def __init__(self): self.name = None self.age = None
以第一種的區(qū)別,這種定義方式時(shí),沒(méi)有形參的。但是它已經(jīng)指定name
和 age
都是 None
, 相當(dāng)于這兩個(gè)參數(shù)已經(jīng)賦值,不過(guò)是None
。
這種形式是可以直接實(shí)例對(duì)象,然后再給對(duì)象里的屬性賦值:
stu = Student() # 正常實(shí)例 """查看stu對(duì)象的屬性是什么狀態(tài)""" print(stu.__dict__) # 打印出:{'name': None, 'age': None}
然后再來(lái)重新給對(duì)象的屬性賦值:
stu.name = '陳冠希' stu.age = 16
以上就是__init__
方法定義的一些區(qū)別。
那么為什么在class中 要定義__init__
方法呢?因?yàn)樗且粋€(gè)初始化方法,沒(méi)有初始化的話(huà),實(shí)例后的對(duì)象,用__dict__
方法查看對(duì)象里面的屬性將是空的。
總結(jié)
到此這篇關(guān)于通過(guò)一文帶你弄懂Python3中的def __init__的文章就介紹到這了,更多相關(guān)Python3的def __init__內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python geopandas讀取、創(chuàng)建shapefile文件的方法
shapefile是GIS中非常重要的一種數(shù)據(jù)類(lèi)型,在ArcGIS中被稱(chēng)為要素類(lèi)(Feature Class),主要包括點(diǎn)(point)、線(xiàn)(polyline)和多邊形(polygon),本文重點(diǎn)給大家介紹python geopandas讀取、創(chuàng)建shapefile文件的方法,需要的朋友參考下吧2021-06-06Python標(biāo)準(zhǔn)庫(kù)json模塊和pickle模塊使用詳解
這篇文章主要介紹了Python標(biāo)準(zhǔn)庫(kù)json模塊和pickle模塊使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Keras自定義實(shí)現(xiàn)帶masking的meanpooling層方式
這篇文章主要介紹了Keras自定義實(shí)現(xiàn)帶masking的meanpooling層方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-06-06淺談pytorch中的nn.Sequential(*net[3: 5])是啥意思
這篇文章主要介紹了pytorch中的nn.Sequential(*net[3: 5])是啥意思,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04