版權(quán)聲明:轉(zhuǎn)載請注明作者(獨(dú)孤尚良dugushangliang)出處: https://blog.csdn.net/dugushangliang/article/details/90200689
?
python代碼如下。
class Son():
def __init__(self):
print ( "son say hi" )
print("haha")
if __name__=='__main__':
son=Son()
運(yùn)行結(jié)果如下:
再試用下面代碼,只有幾個(gè)類的定義,沒有實(shí)例化。
class Fb():
def __init__(self):
print ( "Fb類的構(gòu)造函數(shù)" )
print("Fb類的普通語句")
class Fa():
def __init__(self):
print ( "Fa類的構(gòu)造函數(shù)" )
print("Fa類的普通語句")
class Fc(Fa):
#def __init__(self):
#print ( "Fc類的構(gòu)造函數(shù)" )
print("Fc類的普通語句")
class Son(Fc):
ss=12
def __init__(self):
#super().__init__()
#Fb.__init__(self)
print ( "子類的構(gòu)造函數(shù)" )
print("子類的普通語句")
結(jié)果為:
由此得知,python類在創(chuàng)建對象時(shí),及實(shí)例化時(shí)才執(zhí)行構(gòu)造函數(shù)__init__。而在程序剛開始,運(yùn)行到類的定義時(shí),會先執(zhí)行類的普通語句,對類進(jìn)行一個(gè)注冊,注冊是按照類定義的先后順序執(zhí)行的。
這個(gè)和java有些相似之處和不同之處。
java的類中除了變量和方法外,可以有初始化塊,java的初始化塊是需要使用到某些類的時(shí)候才開始執(zhí)行相應(yīng)類的初始化塊等,沒有使用的類即使有定義也不會執(zhí)行其初始化代碼塊。而python的類是只要有類定義就執(zhí)行這些類的普通語句,即使有的類最后并沒有使用,等實(shí)例化某類的時(shí)候再啟動(dòng)某類的構(gòu)造函數(shù)。
如果涉及繼承,也有不同。python是先執(zhí)行完所有的普通語句,再執(zhí)行構(gòu)造函數(shù)。java是根據(jù)繼承順序,先執(zhí)行靜態(tài)初始化塊,再根據(jù)類的繼承順序逐個(gè)地先執(zhí)行普通初始化塊再執(zhí)行構(gòu)造函數(shù)。
java創(chuàng)建實(shí)例時(shí)代碼執(zhí)行順序 | python創(chuàng)建實(shí)例時(shí)代碼執(zhí)行順序 |
---|---|
父類的靜態(tài)初始化塊 | 父類的普通語句 |
子類的靜態(tài)初始化塊 | 子類的普通語句 |
父類的普通初始化塊 | ? |
父類的構(gòu)造函數(shù) | 父類的構(gòu)造函數(shù) |
子類的普通初始化塊 | ? |
子類的構(gòu)造函數(shù) | 子類的構(gòu)造函數(shù) |
python的實(shí)例化順序是怎么知道的呢?
class Fa():
def __init__(self):
print ( "Fa父類的構(gòu)造函數(shù)" )
print("FA父類的普通語句")
class Son(Fa):
def __init__(self):
super().__init__()
print ( "子類的構(gòu)造函數(shù)" )
print("子類的普通語句")
if __name__=='__main__':
son=Son()
?
獨(dú)孤尚良dugushangliang——著
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
