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

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