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__自动释放所有对象

输出结果:

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