對(duì)象的__del__是對(duì)象在被gc消除回收的時(shí)候起作用的一個(gè)方法,它的執(zhí)行一般也就意味著對(duì)象不能夠繼續(xù)引用。
示范代碼如下:
class Demo:def __del__(self): print("calling __del__") obj = Demo()del obj
程序執(zhí)行結(jié)果如下:
grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.pycalling __del__
但是,這并不是讓__del__執(zhí)行的唯一方式。其實(shí),這個(gè)方法也可以直接調(diào)用。測(cè)試代碼如下:
class Demo:def __init__(self): print("calling __del__")obj = Demo()obj.__del__()
程序執(zhí)行結(jié)果:
grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.pycalling __del__
但是,這樣的執(zhí)行很多時(shí)候并不能夠保證垃圾回收的正常執(zhí)行。
如下代碼:
grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.pycalling __del__calling __del__
執(zhí)行結(jié)果:
grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.pycalling __del__calling __del__
推測(cè):上面的刪除方法觸發(fā)了兩次刪除,但是由于引用關(guān)系,刪除銷(xiāo)毀其實(shí)沒(méi)有實(shí)現(xiàn)。
修改代碼驗(yàn)證如下:
class Demo:def __del__(self): print("calling __del__") del self obj = Demo()obj.__del__()print(id(obj))
執(zhí)行結(jié)果:
grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.pycalling __del__140726800222040calling __del__
從上面看來(lái),其實(shí)主要還有對(duì)對(duì)象的引用,這個(gè)銷(xiāo)毀的動(dòng)作還是需要等待對(duì)象引用沒(méi)有了以后才能夠完成。進(jìn)一步驗(yàn)證代碼:
class Demo:def __del__(self): print("calling __del__") del self obj = Demo()obj.__del__()print(id(obj))print(id(obj))
執(zhí)行結(jié)果:
grey@DESKTOP-3T80NPQ:/mnt/e/01_workspace/02_programme_language/03_python/03_OOP/2017/08$python del_method.pycalling __del__140568015406936140568015406936calling __del__
從上面結(jié)果看,猜測(cè)還是準(zhǔn)確的。
以上這篇Python對(duì)象中__del__方法起作用的條件詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持武林站長(zhǎng)站。
新聞熱點(diǎn)
疑難解答
圖片精選