python有析构函数吗_Python3学习之路~6.4 析构函数
发布日期:2021-10-21 13:32:16 浏览次数:2 分类:技术文章

本文共 1451 字,大约阅读时间需要 4 分钟。

析构函数是在实例释放、销毁的时候执行的,通常用于做一些收尾工作。比如说,关闭一些数据库连接、打开的临时文件等。

#Author:Zheng Na

class Role:

# 构造函数

def __init__(self,name,role,weapon,life_value=100,money=15000):

self.name = name

self.role = role

self.weapon = weapon

self.life_value = life_value

self.money = money

# 类的方法(动态属性)

def buy_gun(self,gun_name):

print("%s just bought %s" %(self.name,gun_name))

def got_shot(self):

print("ah...I got shot...")

# 析构函数:在实例对象释放、销毁的时候自动执行

def __del__(self):

print("%s:彻底死了。。。" %self.name)

r1 = Role("Alex","Policeman","AK47")

r1.buy_gun("AK47")

r1.got_shot()

# del r1 #删除实例r1

r2 = Role("Jack","terrorist","B22")

r2.buy_gun("B22")

r2.got_shot()

# 执行结果1(没有del r1代码):你会发现最后alex先死了,Jack后死了

# Alex just bought AK47

# ah...I got shot...

# Jack just bought B22

# ah...I got shot...

# Alex:彻底死了。。。

# Jack:彻底死了。。。

# 执行结果2(有del r1代码):你会发现最后alex先死了,然后Jack才实例化再死

# Alex just bought AK47

# ah...I got shot...

# Alex:彻底死了。。。

# Jack just bought B22

# ah...I got shot...

# Jack:彻底死了。。。

现在有一个问题,假设我们声明了一个实例r1,然后就调用了一次,以后再也没有用过它,这个程序运行了2年,按理说这个实例只用了一次,应该被销毁。那么Python是否会将其自动销毁呢?答案是否定的。因为Python不知道你的这个实例再也不用了。那么Python如何知道你的实例还在不在用呢?只要你的变量名r1还存在,Python就认为你还要用它。当你del r1时,删除的并不是内存中的数据,而是r1这个变量名,就相当于你把一个小房子的门牌号给拿走了,门牌号拿走就代表这个小房子可以拆了。Python虚拟机里有一个高速循环的计时器,过一会儿就收一次垃圾(发现内存中有一个小房子没有门牌号就立马删除)。所以只要有门牌号(变量名r1)存在,Python就认为你还要用r1,就不会删除,即便你的实际程序不再用它,但Python就是会认为你还要用。所以如果你希望你的代码性能好点儿,就可以手动del r1。

4d757f94b4a353045cdaf216564c8673.png

注:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。

转载地址:https://blog.csdn.net/weixin_28764823/article/details/114439510 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java ace admin_ace-admin-master
下一篇:java流程拖拽功能_在JAVA中使用拖拽功能

发表评论

最新留言

不错!
[***.144.177.141]2024年03月09日 07时21分38秒