Python中是否有Dispose模式?

时间:2017-08-29 08:34:04

标签: python garbage-collection dispose idisposable

我必须为C API创建一个python-wrapper。我使用ctypes从python调用C dll。我能够创建Handle并从python中使用它。我在Python中寻找类似于C#的Dispose模式。在python中是否存在Dispose模式?

1 个答案:

答案 0 :(得分:1)

Python具有:

  • try ... finally,相当于C#中的类似构造;
  • with语句,类似于C#中的using(... = new ...())

请注意,与C#不同,with语句接受已构造的对象,进入时调用__enter__,退出时调用__exit__。即对象在__init__中初始化,资源在__enter__中获取并在__exit__中进行处置。因此,此类对象可以多次使用。

使用contextlib.closing,可以更接近C#。在__init__中获取资源并在close方法中进行配置。 contextlib.closing基本上是包装器,它在其close中调用__exit__

在您的情况下,您应该在__init__中进行所有准备工作,在__enter__中获取实际的句柄,然后在__exit__中进行处理。