python笔记-- “__del__”析构方法

-#### 1、基本概念(构造函数与析构函数)
特殊函数:由系统自动执行,在程序中不可显式地调用他们
构造函数: 建立对象时对对象的数据成员进行初始化(对象初始化)
析构函数: 对象生命期结束时回收的对象(回收/撤销对象)

2、__del__析构方法的作用

**使用场景:**一般定义在类内,被称为析构方法
作用: 销毁类的实例的时候调用,以释放占用的资源,其中可以放一些清理资源的代码,又如释放连接等
举例:

import  time
class Person:
    def __init__(self,name,age=18):
        self.name = name
        self._age = age

    def __del__(self):
        print('del析构方法进行对象销毁的清理工作')

def atest():
    tom = Person('tom')
atest()

运行结果:
python笔记-- “__del__”析构方法_第1张图片
以上结果可以看出,在类调用结束后,进行销毁时会自动调用__del__

2、与del方法的区别

我们先看个例子:

class Person:
    def __init__(self,name,age=18):
        self.name = name
        self._age = age

    def pa_a(self):
        print(f"姓名:{self.name}")

    # def __del__(self):
    #     print('del析构方法进行对象销毁的清理工作')


def atest():
    tom = Person('tom')
    del tom  
    tom2 = tom
    print(tom2.pa_a())

atest()

运行结果:
python笔记-- “__del__”析构方法_第2张图片
从以上运行结果可以看出,del tom执行后,相当于tom在内存中的引用被删除了,再将tom2指向tom的内存地址,是无法找到引用的,也就会报错。可以看出del是会删除引用计数的

再让我们来看看__del__:

import  time
class Person:
    def __init__(self,name,age=18):
        self.name = name
        self._age = age

    def __del__(self):
        print('del析构方法进行对象销毁的清理工作')



def atest():
    tom = Person('tom')
    tom.__del__()
    tom.__del__()
    tom.__del__()
    tom.__del__()
    print('==========start========')
    tom2 = tom
    tom3 = tom2
    print('=======del1')
    del tom
    time.sleep(3)
    print('======del2')
    del tom2
    print('==========del3')
    del tom3
    time.sleep(3)
    print('========end')

atest()

运行结果:
python笔记-- “__del__”析构方法_第3张图片
结论:
del: 会删除内存中的引用计数
_del_不会删除引用计数,只是在对象销毁的时候自动调用

你可能感兴趣的:(python,python,开发语言)