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