Поведение __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>

Кто-нибудь может объяснить, что здесь происходит? Заранее спасибо.

1 ответ

Решение

Интерактивный интерпретатор 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!'
Другие вопросы по тегам