如何避免通过 pythonnet 在 python 中的 IDisposable 对象上显式调用 Dispose 方法?
How to avoid explicitly calling Dispose method on IDisposable object in python through pythonnet?
最近,我用 C#(一个小型库)开发了动态对象,我可以 link 我的 python 应用程序(如果我的命名不正确,请原谅)。我有一些 IDisposable 对象,它在构造函数中打开文件,然后在 Dispose()
方法中关闭它。该文件需要在对象的整个生命周期中保持打开状态。
我希望 Dispose()
方法会在最后一次实时引用后自动调用,但我必须显式调用它。
- Python 3.7.3
- Ubuntu 18.04.2
- python网络 2.4.0
- 单声道 5.18.1.28
import clr
clr.AddReference("MyLibrary")
from MyLibrary import DynamicObject
然后在我的代码中进一步使用它:
def foo():
my_obj = DynamicObject()
...
my_obj().Dispose() # have to call it here
return
此外,终结器也没有被调用。有没有办法使用终结器或 Dispose()
方法而不显式调用它们,或者 CLR 的垃圾收集器不知道我的 python 脚本中发生了什么? python 如何通过 python.net 进行通信?
谢谢 :-)
Dispose
不会自动调用。它在那里,因此无论使用 class 什么都可以在需要时使用它来处理非托管资源。终结器 将 自动调用,但这将在垃圾收集器决定执行时自动调用,而不是在实例超出范围后立即调用。
如果您想更轻松地管理 Dispose
通话,可以查看 using statement, which is supported by with
in Python。
最近,我用 C#(一个小型库)开发了动态对象,我可以 link 我的 python 应用程序(如果我的命名不正确,请原谅)。我有一些 IDisposable 对象,它在构造函数中打开文件,然后在 Dispose()
方法中关闭它。该文件需要在对象的整个生命周期中保持打开状态。
我希望 Dispose()
方法会在最后一次实时引用后自动调用,但我必须显式调用它。
- Python 3.7.3
- Ubuntu 18.04.2
- python网络 2.4.0
- 单声道 5.18.1.28
import clr
clr.AddReference("MyLibrary")
from MyLibrary import DynamicObject
然后在我的代码中进一步使用它:
def foo():
my_obj = DynamicObject()
...
my_obj().Dispose() # have to call it here
return
此外,终结器也没有被调用。有没有办法使用终结器或 Dispose()
方法而不显式调用它们,或者 CLR 的垃圾收集器不知道我的 python 脚本中发生了什么? python 如何通过 python.net 进行通信?
谢谢 :-)
Dispose
不会自动调用。它在那里,因此无论使用 class 什么都可以在需要时使用它来处理非托管资源。终结器 将 自动调用,但这将在垃圾收集器决定执行时自动调用,而不是在实例超出范围后立即调用。
如果您想更轻松地管理 Dispose
通话,可以查看 using statement, which is supported by with
in Python。