有史以来第一个问题,对不起,如果以前曾被问过 - 我做过搜索,但我找不到任何似乎可以回答它的内容。
我一直在尝试理解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>
有人能解释一下这里发生了什么吗?提前谢谢。
答案 0 :(得分: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!'