Python 类的析构函数的一些疑问,析构到底是和类绑定一起释放还是类释放以后调用的函数。

2021-09-03 11:25:58 +08:00
 paniford

在对 python 实现代码拼接的时候将用户的代码拼接成一个类,其中析构函数可能会用来释放一些资源,不确定如果析构函数在调用的时候出错的话,资源会不会被释放。我也手动调用了 gc,这个过程中,看了网上一些说明,没搞明白析构函数是释放完类以后调用了析构函数还是调用完析构释放了整个包含析构的类?

1386 次点击
所在节点    Python
12 条回复
deplivesb
2021-09-03 13:18:28 +08:00
python 有析构函数??
LoNeFong
2021-09-03 14:21:31 +08:00
@zhangdeplives 应该说的是__del__
frostming
2021-09-03 14:24:23 +08:00
1L 的目的是提醒 __del__ 不能叫做析构函数,如果按照析构函数去理解__del__的作用那多半是会出现大的偏差
lucays
2021-09-03 14:42:49 +08:00
什么场景需要自己去实现 del 。。。感觉是其他语言的思维带过来了吧
learningman
2021-09-03 16:31:05 +08:00
我写 py 还没用过 del
renmu123
2021-09-03 16:33:38 +08:00
Python 一般用 with 来实现
deplivesb
2021-09-03 16:56:57 +08:00
Note del x doesn’t directly call x.__del__() — the former decrements the reference count for x by one, and the latter is only called when x’s reference count reaches zero.

上面这句话摘自 python 3.9.7 doc 对__del__的注释

如果你真的需要手动的去释放某些""
princelai
2021-09-04 12:18:45 +08:00
我之前发帖问过双下划线 del,用于析析构,问题很大,不如去了解下 weakref,可能符合你要求
paniford
2021-09-09 09:18:56 +08:00
@princelai 好的谢谢
paniford
2021-09-09 09:20:46 +08:00
@lucays 提供给用户的代码编辑器,可能需要手动释放 gpu 或者一些资源的场景
paniford
2021-09-09 09:21:43 +08:00
@zhangdeplives 明白了,谢谢,我下次看文档
paniford
2021-09-09 09:27:14 +08:00
就怕如果 del 的时候出错,gpu 没被释放的话,要不要考虑后端处理一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/799633

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX