我的設計如下:循環引用
__main__
引用a
a
引用b
b
引用a
a
被創建,然後從__main__
設置的
因此a
和b
有循環引用。不過,在del a
我寧願處置a
和b
。
我在許多地方看到建議使用上下文管理器,特別是with
而不是__del__()
。然而,我所看到的with
的所有例子在本地範圍內(例如某種方法)開始和結束
這可以用with
優雅地執行嗎?
有什麼選擇?
我的設計如下:循環引用
__main__
引用a
a
引用b
b
引用a
a
被創建,然後從__main__
因此a
和b
有循環引用。不過,在del a
我寧願處置a
和b
。
我在許多地方看到建議使用上下文管理器,特別是with
而不是__del__()
。然而,我所看到的with
的所有例子在本地範圍內(例如某種方法)開始和結束
這可以用with
優雅地執行嗎?
有什麼選擇?
我建議之一:
__del__
但在 - 當循環引用涉及dispose
方法你呼叫在正確的時間(s)在一般情況下,當你知道你有循環引用,relyi自動處理__del__
不是一個好主意。它很脆弱 - 即使您在某些情況下設法使其發揮作用,依賴關係的小改動可能會再次破壞它。
垃圾收集器應該處理這個問題。
有什麼選擇?
什麼都不做。直到您創建數百萬個這樣的循環引用 - 並且可以證明這(並且僅此)正在破壞您的程序 - 實際上並不重要。