1

第一个问题,对不起,如果以前有人问过-我确实搜索过,但找不到任何似乎可以回答的问题。

我一直在尝试理解 python__del__方法的行为,因为我需要它对包装的 C 代码执行一些清理。

我的理解__del__是当对象的引用计数达到零时调用它,而不是在del对象引用上调用时调用。这让我相信在没有赋值的情况下实例化一个对象会在之后立即调用__init__then __del__,但情况似乎并非如此,如下面的代码所示:

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

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

谁能解释这里发生了什么?提前致谢。

4

1 回答 1

5

Python 交互式解释器保留对_变量中最后一个结果的引用。你的对象还活着。

运行另一个表达式来清除它:

>>> 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!'
于 2014-10-09T09:57:02.250 回答