2014-10-09 45 views
1

有史以來第一個問題,如果之前有人問過 - 我做了搜索,但找不到任何似乎回答它的東西。未分配的python對象上的__del__的行爲

我一直在試圖理解python的__del__方法的行爲,因爲我需要它對包裝的C代碼執行一些清理。

我對__del__的理解是,當對象的引用計數達到零時調用它,而不是在對象引用上調用del時調用。這使我相信,實例化對象沒有分配會後立即撥打__init__然後__del__,但這似乎並沒有這樣的情況,如下面的代碼演示:

class Foo(): 
    def __init__(self): 
     print "Hello" 
    def __del__(self): 
     print "Goodbye" 

Foo() 
Hello 
<__main__.Foo instance at 0x7fb943075a28> 

誰能解釋一下是怎麼回事?提前致謝。

回答

5

Python交互式解釋器保留對_ variable中最後一個結果的引用。你的物體還活着。

運行另一種表達方式來清除它:

>>> class Foo(): 
... def __init__(self): 
...  print "Hello" 
... def __del__(self): 
...  print "Goodbye" 
... 
>>> Foo() 
Hello 
<__main__.Foo instance at 0x100651ef0> 
>>> _ 
<__main__.Foo instance at 0x100651ef0> 
>>> 'Hello world!' 
Goodbye 
'Hello world!' 
+0

'美孚()和None'也適用 – 2014-10-09 09:59:57

+0

非常感謝!偷偷摸摸的翻譯,囤積參考文獻! – 2birds 2014-10-09 10:57:52

+0

@MartijnPieters完成。我一直在這個網站上潛伏多年,直到今天都沒有必要提出一個問題。我現在需要學習如何使用它! – 2birds 2014-10-09 13:14:42