類比一下Java就很好理解了,__init__是Python類的構(gòu)造函數(shù),self作用類似于Java中的this指針。
創(chuàng)新互聯(lián)建站是一家專注于網(wǎng)站設(shè)計、成都網(wǎng)站制作與策劃設(shè)計,高港網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)建站做網(wǎng)站,專注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:高港等地區(qū)。高港做網(wǎng)站價格咨詢:028-86922220
python中的__init__()時類的初始化函數(shù),比如:
class?Obj:
def?__init__():
print?1
obj?=?Obj()?#這時候調(diào)用__init__這個方法
如果解決了您的問題請采納!
如果未解決請繼續(xù)追問
通常構(gòu)造一個類,用 init 初始化:
為什么python類需要初始化
1.python 類初始化屬性 def __init__() 中定義,實(shí)例化對象后可直接調(diào)用
2.python 類非初始化屬性在 def func() 中定義,實(shí)例化對象后, 先調(diào)用調(diào)用函數(shù),再調(diào)用屬性
結(jié)果:
Python中,__init__()方法是所謂的對象的“構(gòu)造函數(shù)”,負(fù)責(zé)在對象初始化時進(jìn)行一系列的構(gòu)建操作
假設(shè)有如下類:
class?worker:
pass
在Python中,對某個類實(shí)例進(jìn)行成員賦值,可以創(chuàng)建不存在的成員:
a=worker()
a.pay=55000
a.name='Bob'
如果對于每一個worker類的實(shí)例對象,都要進(jìn)行如此賦值的話,這個類會變得很難使用
另外,對于用于特殊場合的類,可能要求在對象創(chuàng)建時,進(jìn)行連接數(shù)據(jù)庫、連接FTP服務(wù)器、進(jìn)行API驗(yàn)證等操作,這些初始化操作,都可以封裝在__init__()方法中進(jìn)行
__init__方法使用如下規(guī)則定義:
class?ex:
def?__init__(self):
pass
__init__方法必須接受至少一個參數(shù)即self,Python中,self是指向該對象本身的一個引用,通過在類的內(nèi)部使用self變量,類中的方法可以訪問自己的成員變量,簡單來說,self.varname的意義為”訪問該對象的varname屬性“
當(dāng)然,__init__()中可以封裝任意的程序邏輯,這是允許的,__init__()方法還接受任意多個其他參數(shù),允許在初始化時提供一些數(shù)據(jù),例如,對于剛剛的worker類,可以這樣寫:
class?worker:
def?__init__(self,name,pay):
self.name=name
self.pay=pay
這樣,在創(chuàng)建worker類的對象時,必須提供name和pay兩個參數(shù):
b=worker('Jim',5000)
Python會自動調(diào)用worker.__init__()方法,并傳遞參數(shù)。
通常情況下,self形參由Python自動賦值,但是,在類繼承中,并不是這樣
例如,Python的HTML處理工具HTMLParser,是一個基于OOP模型的工具,要使用該工具,必須編寫一個類,繼承html.parser.HTMLParser類,并重載一系列方法,以定制自己的功能
from?html.parser.HTMLParser
class?ex2(HTMLParser):
def?__init__(self):
HTMLParser.__init__(self)
此處,需要調(diào)用了HTMLParser類的__init__方法,而且,此處手動給HTMLParser.__init__()方法的self形參賦值,事實(shí)上,如果不顯式指定self形參的值,Python不會在此處自動為HTMLParser.__init__()方法的self形參進(jìn)行賦值
如此設(shè)計的原因是,在子類中需要獲得超類的成員和方法,而通過在子類的__init__方法中調(diào)用超類的__init__方法,并手動給它傳遞指向子類的self值,可以使超類的__init__方法將所初始化的變量設(shè)置成子類的變量,這樣,就可以在子類中直接訪問超類的變量了。
class A:
def __init__(self,newid= None):
self.newid=newid
這個一看就是一個類的初始化屬性,你初始化的時候只要import這個對象。
from a import A
obj = A(newid)
這樣就傳給那個初始化函數(shù)了。
這些都是python比較基礎(chǔ)的東西,還是建議你找本書看看,至少python的基本語法,類,內(nèi)置函數(shù)這些要高明白。
如果解決了您的問題請采納!
如果未解決請繼續(xù)追問
首先你要理解類和實(shí)例的區(qū)別。
類是你定義的這個新類型,這個類型可以有很多個實(shí)例。
比如 ?a = A(),A是個類,a就是A的一個實(shí)例,同樣可以b=A(),b也是A的一個實(shí)例。
初始化函數(shù)__init__在實(shí)例剛創(chuàng)建完成的時候調(diào)用,這里可以對這個實(shí)例的屬性進(jìn)行初始化。
比如:
class?A:
def?__init__(self,num):
self.data?=?num
a?=?A(1)
b?=?A(2)
a.data的值就是1,b.data的值就是2