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