在使用Python編程時(shí),有時(shí)會(huì)涉及到對(duì)象的析構(gòu),Python提供了一種特殊方法__del__()來實(shí)現(xiàn)析構(gòu)函數(shù)。Python中的析構(gòu)函數(shù)是自動(dòng)調(diào)用的,它們被用來釋放對(duì)象占用的資源,例如關(guān)閉文件、數(shù)據(jù)庫(kù)連接,等等。Python的析構(gòu)函數(shù)執(zhí)行順序如下:
基類 -> 子類 -> 實(shí)例
這個(gè)順序是類繼承結(jié)構(gòu)中的順序,所以首先會(huì)執(zhí)行基類的__del__()方法,然后是子類的__del__()方法,最后是實(shí)例的__del__()方法。
下面通過一個(gè)簡(jiǎn)單的示例來說明這個(gè)執(zhí)行順序:
class BaseClass: def __init__(self): print('初始化BaseClass') def __del__(self): print('釋放BaseClass') class SubClass(BaseClass): def __init__(self): print('初始化SubClass') def __del__(self): print('釋放SubClass') class Instance: def __init__(self): print('初始化Instance') def __del__(self): print('釋放Instance') i = Instance() s = SubClass() b = BaseClass() del i del s del b
執(zhí)行上述代碼后,輸出結(jié)果如下:
初始化Instance 初始化SubClass 初始化BaseClass 釋放Instance 釋放SubClass 釋放BaseClass
可以看到,首先是實(shí)例的__init__()方法被調(diào)用初始化,然后是子類的__init__()方法被調(diào)用初始化,最后是基類的__init__()方法被調(diào)用初始化。然后,按照析構(gòu)函數(shù)執(zhí)行順序,最后被創(chuàng)建的實(shí)例首先被刪除,然后是子類實(shí)例,最后是基類實(shí)例。
需要注意的是,Python解釋器在退出時(shí)會(huì)自動(dòng)調(diào)用所有還未被刪除的對(duì)象的析構(gòu)函數(shù),因此,不需要手動(dòng)刪除實(shí)例。