我们可以强制执行带有del
的析构函数,通常只让垃圾收集器完成它的工作,但如果我们在Python中定义一个类析构函数时,它是否保证对每个实例化的对象都执行?
简短回答:没有。
更长的答案:__del__
并不是C++意义上的析构函数,您可能不想使用它
相反,如果您需要清理,您可能应该将对象放入上下文管理器中(通过编写__enter__
和__exit__
方法(,并在with
语句中使用它们,和/或为它们提供需要显式调用的close
方法。Python中的大多数类和广泛使用的库都需要释放外部资源(通常通过让__enter__
返回self
和__exit__
调用self.close()
(。
使用垃圾回收,通常不需要像在C++中那样解除分配__init__
或__new__
中分配的任何内存,因为它将被自动收集。
__del__
方法有一些用途,但很少使用。