Python __del__ 不能用作析构函数? [复制]

2023-12-30

经过多次检查,我确实发现有关该主题的信息不一致。

在某些情况下,我确实发现__init__ and __del__是 python 中的构造函数和析构函数。这似乎适用于__init__,因为我看到它在创建类时被调用;但__del__当程序结束时,永远不会被调用。

在其他情况下,我确实发现__del__很糟糕,您必须手动明确地释放所有内容。

现在的问题是:哪个是哪个?因为使用 unittest.TestCase 类,当我调用__del__它永远不会被调用。遗憾的是,我无法使用拆解,因为我需要在测试运行之前启动一个进程,并在完成测试后结束它


很少有这样的帖子,您会在其中看到这种行为,即例如__del__没有接到电话,只是进行了讨论。举几个我觉得有趣的来源,SO 和__del__文档:
什么是 __del__ 方法,如何调用它? https://stackoverflow.com/questions/1481488/what-is-the-del-method-how-to-call-it
我不明白这个 python __del__ 行为 https://stackoverflow.com/questions/6104535/i-dont-understand-this-python-del-behaviour
https://docs.python.org/3/reference/datamodel.html#object。del https://docs.python.org/3/reference/datamodel.html#object.__del__

我发现文档中的部分特别有启发性:

Note: del x不直接调用x.__del__()— 前者将 x 的引用计数减一,后者仅在 x 的引用计数达到零时调用。一些可能阻止对象的引用计数变为零的常见情况包括: 对象之间的循环引用(例如,双向链表或具有父子指针的树数据结构);对捕获异常的函数的堆栈帧上的对象的引用(存储在 sys.exc_info() 中的回溯)2 https://stackoverflow.com/questions/6104535/i-dont-understand-this-python-del-behaviour保持堆栈帧处于活动状态);或对在交互模式下引发未处理异常的堆栈帧上的对象的引用(存储在 sys.last_traceback 中的回溯使堆栈帧保持活动状态)。第一种情况只能通过明确打破循环来补救;第二个可以通过在不再有用时释放对回溯对象的引用来解决,第三个可以通过在 sys.last_traceback 中存储 None 来解决。当启用循环垃圾收集器(默认情况下处于打开状态)时,会检测并清除垃圾循环引用。有关此主题的更多信息,请参阅 gc 模块的文档。

所以很明显有这样的情况__del__可能不会被调用,因为对象的引用计数尚未达到零,并且在注释中列出了可能发生这种情况的几种情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python __del__ 不能用作析构函数? [复制] 的相关文章

随机推荐

  • 我可以在 Facebook 应用程序上设置页面选项卡高度吗?

    我使用以下命令创建了一个 Facebook 页面选项卡应用程序Heroku 托管选项 https devcenter heroku com articles facebook 我看到一个用于将 页面选项卡 宽度设置为 正常 810 像素 或
  • Raphaël 对象:模拟点击

    是否可以模拟拉斐尔对象上的点击 我已经尝试过了 object click Error click is not a function or object dispatchEvent click Error Could not convert
  • 使用 java Mapreduce 处理 JSON

    我是 hadoop mapreduce 新手 我输入了文本文件 其中数据已存储如下 这里只有几个元组 data txt author Shari f Qa sim book al Rabi al manshu d author Na s i
  • 传递给 Rust WebAssembly 模块时 JavaScript 字符串为空

    当将字符串传递给 Rust WASM 模块时 传递的数据显示为空白 根据模式匹配real code compute功能 以下代码是我尝试过的 我不知道这是否与它的返回方式有关 但是当我传递硬编码时 str 效果很好 但是 那JsIntero
  • 验证:仅字母、数字和 -

    我想验证我的用户 因此他们只能在用户名中使用 a z 和 validates format of username with gt a z 然而这条规则也允许空格 Username should use only letters numbe
  • Oauth 错误 invalid_request:redirect_uri 未列入白名单

    我正在尝试基于此使用 React 和 Node 开发一个应用程序文档 https developers shopify com tutorials build a shopify app with node and react 我一步步按照
  • ListenableWorker 不删除通知图标

    我正在使用 ListenableWorker 执行后台任务 另外我希望操作系统了解我的服务重要性 所以我打电话 setForegroundAsync new ForegroundInfo WorkerConstants NOTIFICATI
  • 文本变量不起作用

    我正在尝试从 Tkinter 中的 Entry 小部件中获取文本 它适用于 Entry1 get 但不适用于 textvariable 我究竟做错了什么 from Tkinter import master Tk v StringVar d
  • 龙卷风“@run_on_executor”正在阻塞

    我想问一下如何龙卷风 concurrent run on executor https tornado readthedocs org en latest concurrent html tornado concurrent run on
  • django-registration 激活 url 中的等号

    我正在使用 django registration 由于某种原因 当它发送激活电子邮件时 它会在倒数第三个字符中插入一个等号 如下所示 http example com accounts activate a65b4aca5156211bc
  • 查找给定时间 .wav 的“音量”

    我正在为我的第四年项目 处理函数反应式编程 开发一个小型示例应用程序 我们的想法是创建一个简单的程序 可以播放 wav 文件 然后显示正在播放歌曲的当前音量的 弹跳 动画 就像在录音软件中一样 我正在 Scala 中构建它 因此主要关注 J
  • 无论 IP 地址是什么,isReachable 始终返回 true

    所以我一直在使用 isReachable 在我的 java 代码中 ping 一个地址 这段代码似乎是每个人都使用的 try InetAddress address InetAddress getByName 172 16 2 0 Try
  • ASP.NET vNext 和 EF7 中的多个 dbContext

    我正在尝试使用 MVC 6 和 EF7 通过 ASP NET vNext 构建 Web 系统 我正在看这个教程 http stephenwalther com archive 2015 01 17 asp net 5 and angular
  • elasticsearch将对象插入索引

    我是 elasticsearch 的新手 正在寻求使用 Java API 的一些帮助 我有一些域对象 例如 XmlRootElement public class BasicActivity private String activityN
  • Xcode 6.3(和 6.2)在 [UIFont fontWithName: size:] 上命中断点

    在我的 iOS 应用程序中 我使用一个类 DKTheme 将我的字体和图像保存在一个集中的位置 我的实现看起来像这样 instancetype theme static DKTheme theme nil static dispatch o
  • OpenGL 在 VBO 内分离多边形

    我正在尝试使用一个 VBO 来绘制彼此分离的多边形 当我绘制多边形时 OpenGL不知道从哪里开始一个新的多边形并绘制联合的多边形 我怎样才能在VBO 或IBO 上放置一个断点来告诉OpenGL开始一个新的多边形 抱歉 这似乎是一个新手问题
  • SQL查询获取同一天的记录

    我希望找到当天的所有记录 我有一块田地Date日期类型 如果我使用 WHERE Date 2011 04 07 it works 但如果我使用 WHERE Date CURDATE or WHERE Date NOW 它不返回任何结果 当实
  • WPF 上下文菜单,其项目被定义为数据模板

    我有一个显示项目集合的列表视图 每个项目都有一个视图模型 MVVM 作为其基础数据 我想做的是当用户右键单击这些列表视图项之一时在上下文菜单中显示不同的菜单项 显示的菜单项取决于所选项目的类型 即底层视图模型的类型 我希望下面的内容能够工作
  • Firebase 存储:使用下载网址而不是存储引用

    我有一个iOS使用的应用程序Firebase Storage用于存储图像 上传图像后 我保存它storage reference in my Firebase Database 当应用程序加载时 它会获取各种storage referenc
  • Python __del__ 不能用作析构函数? [复制]

    这个问题在这里已经有答案了 经过多次检查 我确实发现有关该主题的信息不一致 在某些情况下 我确实发现 init and del 是 python 中的构造函数和析构函数 这似乎适用于 init 因为我看到它在创建类时被调用 但 del 当程