如何通过pythonnet在python中避免显式调用IDisposable对象的Dispose方法?

2024-05-02 15:12:59 发布

您现在位置:Python中文网/ 问答频道 /正文

最近,我用C#(一个小的类库)开发了动态对象,可以链接到python应用程序(如果命名不正确,请原谅)。我有一些IDisposable对象,它在构造函数中打开文件,然后在Dispose()方法中将其关闭。文件需要在对象的整个生命周期中保持打开状态。在

我希望在最后一次实时引用之后自动调用Dispose()方法,但我必须显式地调用它。在

  • Python 3.7.3
  • Ubuntu 18.04.2版
  • Python2.4.0
  • 单声道5.18.1.28
import clr
clr.AddReference("MyLibrary")
from MyLibrary import DynamicObject

然后在我的代码中进一步使用它:

^{pr2}$

此外,终结器也不被调用。有没有一种方法可以使用finalizer或Dispose()方法而不显式地调用它们,或者CLR的垃圾收集器不知道python脚本中发生了什么?python如何通过python.net?在

谢谢:-)


Tags: 文件对象方法import应用程序链接动态类库
1条回答
网友
1楼 · 发布于 2024-05-02 15:12:59

Dispose不会自动调用。它在那里,因此无论使用该类的任何人都可以在需要时使用它来释放非托管资源。finalizer将自动调用,但这将发生在垃圾回收器决定执行此操作时,而不是在实例超出范围后立即调用。在

如果您想让管理您的Dispose调用稍微容易一点,您可以看看using statement,它由within Python支持。在

相关问题 更多 >