1、主动删除对象调用del 对象;程序运行结束后,python也会自动进行删除其他的对象。
class Animal: def __del__(self): print(\"销毁对象{0}\".format(self)) cat = Animal() cat2 = Animal() del cat2 print(\"程序结束\")
2、如果重写子类的del方法,则必须显式调用父类的del方法,这样才能保证在回收子类对象时,其占用的资源(可能包含继承自父类的部分资源)能被彻底释放。
class Animal: def __del__(self): print(\"调用父类 __del__() 方法\") class Bird(Animal): def __del__(self): # super(Bird,self).__del__() #方法1:显示调用父类的del方法 print(\"调用子类 __del__() 方法\") cat = Bird() #del cat #只能调用子类里面的__del__ #super(Bird,cat).__del__() #方法2:显示调用父类的__del__
函数实例扩展:
#coding=utf-8 \'\'\' 魔法方法,被__双下划线所包围 在适当的时候自动被调用 \'\'\' #构造init、析构del class Rectangle: def __init__(self,x,y): self.x = x self.y = y print(\'构造\') \'\'\' del析构函数,并不是在del a对象的时候就会调用该析构函数 只有当该对象的引用计数为0时才会调用析构函数,回收资源 析构函数被python的垃圾回收器销毁的时候调用。当某一个对象没有被引用时,垃圾回收器自动回收资源,调用析构函数 \'\'\' def __del__(self): print(\'析构\') def getPeri(self): return (self.x + self.y)*2 def getArea(self): return self.x * self.y if __name__ == \'__main__\': rect = Rectangle(3,4) # a = rect.getArea() # b = rect.getPeri() # print(a,b) rect1 = rect del rect1 # del rect while 1: pass
© 版权声明
THE END
暂无评论内容