Мне интересно узнать подробности о __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__
?