Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
__del__在未分配python对象上的行为_Python_Reference Counting_Del - Fatal编程技术网

__del__在未分配python对象上的行为

__del__在未分配python对象上的行为,python,reference-counting,del,Python,Reference Counting,Del,有史以来的第一个问题,对不起,如果以前有人问过-我搜索过,但我找不到任何似乎能回答这个问题的东西 我一直在试图理解python的\uu del\uu方法的行为,因为我需要它对包装好的C代码执行一些清理 我对\uuuu del\uuuu的理解是,当对象的引用计数达到零时调用该函数,而不是在对象引用上调用del时调用该函数。这使我相信,在没有赋值的情况下实例化一个对象会调用\uuuu init\uuuuuuuu,然后紧接着调用\uuuuu del\uuuuuuuu,但情况似乎并非如此,如下代码所示:

有史以来的第一个问题,对不起,如果以前有人问过-我搜索过,但我找不到任何似乎能回答这个问题的东西

我一直在试图理解python的
\uu del\uu
方法的行为,因为我需要它对包装好的C代码执行一些清理

我对
\uuuu del\uuuu
的理解是,当对象的引用计数达到零时调用该函数,而不是在对象引用上调用
del
时调用该函数。这使我相信,在没有赋值的情况下实例化一个对象会调用
\uuuu init\uuuuuuuu
,然后紧接着调用
\uuuuu del\uuuuuuuu
,但情况似乎并非如此,如下代码所示:

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

Foo()
Hello
<__main__.Foo instance at 0x7fb943075a28>
class Foo():
定义初始化(自):
打印“你好”
定义(自我):
打印“再见”
Foo()
你好

有人能解释一下这是怎么回事吗?提前感谢。

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!'
>类Foo():
...    定义初始化(自):
...       打印“你好”
...    定义(自我):
...       打印“再见”
... 
>>>Foo()
你好
>>> _
>>>“你好,世界!”
再见
“你好,世界!”

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!'
>类Foo():
...    定义初始化(自):
...       打印“你好”
...    定义(自我):
...       打印“再见”
... 
>>>Foo()
你好
>>> _
>>>“你好,世界!”
再见
“你好,世界!”

非常感谢!偷偷摸摸的翻译,囤积参考资料@马蒂扬皮特斯完成了。我已经在这个网站上潜伏多年了,直到今天才需要问一个问题。我现在需要学习如何使用它!非常感谢!偷偷摸摸的翻译,囤积参考资料@马蒂扬皮特斯完成了。我已经在这个网站上潜伏多年了,直到今天才需要问一个问题。我现在需要学习如何使用它!