2
我经常创建内部使用某些资源(如请求会话,IMAP连接)的类。我在__init__
初始化这些资源。我应该拆除__init__中构建的所有资源吗?
例如:
class SomeClass:
def __init__(self, login, password):
self.session = requests.Session()
self.imap_connection = IMAPLib.connect(...)
... and so on ...
所以今天的主要问题:我应该手动自由这样的资源,如会议,imap_connections或者它是相当安全的,让他们死在GC运行或者它不是安全的,如果是什么是最佳解决方案?
正如我除了执行一些free_resources
方法并明确调用它理解为实现__enter__
返回self
和泪水所有这些资源的上下方法__exit__
。然后我使用with
块实例化这些类。
同样在没有'with'块的情况下,这些对象不会调用__del__'方法吗? – Glueon
在CPython中,引用计数变为零时(因此在大多数情况下,当函数返回/异常冒出函数并且回溯被清除时)。但是,是的,'with'允许在已知点立即进行确定性清理,而不是“当物体某时消失”。 – ShadowRanger