Мне любопытны подробности __ del __
в python, когда и почему его следует использовать и для чего его не следует использовать. Я на собственном горьком опыте убедился, что это не совсем похоже на то, что можно было бы наивно ожидать от деструктора, поскольку это не противоположность __ new __
/ __ init __
.
class Foo(object):
def __init__(self):
self.bar = None
def open(self):
if self.bar != 'open':
print 'opening the bar'
self.bar = 'open'
def close(self):
if self.bar != 'closed':
print 'closing the bar'
self.bar = 'close'
def __del__(self):
self.close()
if __name__ == '__main__':
foo = Foo()
foo.open()
del foo
import gc
gc.collect()
Я видел в документации, что не гарантировано __ del __ ()
методы вызываются для объектов, которые все еще существуют при выходе из интерпретатора.
Foo
, существующих при выходе из интерпретатора, панель закрывается? del foo
или gc.collect ()
... или ни то, ни другое? если вам нужен более точный контроль над этими деталями (например, панель должна быть закрыта, когда объект не упоминается), как обычно это реализовать? __ del __
гарантировано ли, что __init __
уже звонили? как насчет того, чтобы __ init __
поднялся?