python類中__del__的重寫及其問題

學習__del__方法。爲了搞清這個方法,連帶又學習了object對象、繼承、字符串格式化等內容。然而到現在也是不很理解。先把理解的和不理解的擺出來,做一個初步了結。已經學習兩天了,不能在這個問題上原地踏步。學習編程既要“求甚解”,又要“不求甚解”,一定要拿捏好這個度,才能把握學習的進度和學習的效果之間關係。

#類對象的引用計數爲0時自動調用。
#一般出現在兩個地方:1.手工使用del減少對象引用計數至0,被垃圾回收處理時調用。2.程序結束時調用。

class Animal():
    def __init__(self,name):
        print("%s的 init 方法被調用"%name)
        self._name=name
    def __del__(self):
        print("%s del 方法被調用。"%self._name)#爲什麼無法應用object裏的__del__?
    def display(self,host):
        print("這是%s家的"%host+self._name)#注意格式化的細節,不能寫成("這是%s家的%s"%host%self._name)

cat=Animal("Tom")
rat=Animal("Micky")
cat.display("Tonald")
#程序結束時自動調用del語句

#問題是:
#重寫了__del__之後,是否覆蓋了父類(object)__del__方法?
#如果不是,那就不是重寫?豈不是違背了覆蓋的定義?
#如果是,爲什麼該方法只有一句“print”,卻能夠執行刪除引用的操作呢?
#首先刪除rat
print("首先刪除rat")
del rat
print("程序繼續。。。")
#程序結束,系統最後調用__del__自動釋放所有對象

輸出結果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章