Python 的析構方法 __del__() 是如何工作的?


__del__() 方法被稱為析構方法。當物件被垃圾回收時,它會被呼叫,這發生在對該物件的所有引用都被刪除之後。

在一個簡單的例子中,這可能發生在你刪除一個變數之後,例如 del x,或者如果 x 是一個區域性變數,則在函式結束之後。特別是,除非存在迴圈引用,否則 CPython(標準 Python 實現)將立即進行垃圾回收。

Python 垃圾回收的唯一特性是它發生在所有引用都被刪除之後,所以這並不一定會在之後立即發生,甚至可能根本不會發生。

更重要的是,變數可能由於許多原因而存在很長時間,例如,傳播的異常或模組自省可以使變數引用計數大於 0。此外,變數可以是迴圈引用的一部分——啟用垃圾回收的 CPython 會破壞大多數(但不是全部)這樣的迴圈,而且即使那樣也只是週期性地進行。

__del__ 有一些有效的用例:例如,如果物件 X 引用 Y,並且還在全域性快取中保留 Y 引用的副本 (cache['X -> Y'] = Y),那麼讓 X.__del__ 也刪除快取條目將是很禮貌的。

如果你知道解構函式提供了必要的清理工作,你可能希望直接呼叫它,x.__del__()。

更新於:2019年7月30日

562 次瀏覽

啟動你的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.