当前位置 博文首页 > python析构函数用法及注意事项

    python析构函数用法及注意事项

    作者:小妮浅浅 时间:2021-08-07 17:45

    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
    jsjbwy
    下一篇:没有了