我一直在想如何在Python中編寫類。更具體地說,構造函數是如何實現的以及如何銷燬對象。我不想依靠CPython的引用計數來進行對象清理。這基本上告訴我,我應該使用語句來管理我的對象生命週期,並且我需要一個明確的close/dispose方法(如果對象也是上下文管理器,則可以從__exit__
調用此方法)。在__del__中執行對象關閉/配置真的可以嗎?
class Foo(object):
def __init__(self):
pass
def close(self):
pass
現在,如果我的所有對象的行爲以這種方式和我所有的代碼陳述或顯式調用用來close()
(或dispose()
)我並不真的認爲有必要對我來說,把任何代碼__del__
。我們真的應該使用__del__
來處理我們的物品嗎?
我不想依靠CPython的引用計數來做對象清理。爲什麼不是?對象引用計數有什麼問題? – 2009-07-10 21:35:31
@ S.Lott,如果您將代碼移動到具有更高級垃圾收集的環境(例如Jython或IronPython),那麼引用計數就不存在了 - 如果有一天CPython(例如通過Unladen Swallow)被拖拽和尖叫進入21世紀呢?我同意OP關於我的可重用便攜庫中的「不依賴」RC的觀點(與一次性使用,丟棄,腳本和次要模塊相對)。 – 2009-07-11 02:51:14
@ S.Lott:Alex已經回答了你的問題。想要不依賴於引用計數的另一個好理由是來自PyPy項目的JIT。與CPython相比,它背後的人似乎樂觀地認爲它能夠提供更高的速度。 – Arlaharen 2009-07-12 09:58:50