Гарантируется ли выполнение деструкторов класса Python до завершения программы? - PullRequest
3 голосов
/ 07 августа 2020

Мы можем принудительно выполнить деструктор с помощью del и обычно просто позволяем сборщику мусора делать свою работу, но если мы определим деструктор класса в Python, гарантированно ли он будет выполняться для каждого созданного объекта? *

1 Ответ

4 голосов
/ 07 августа 2020

Короткий ответ: нет.

Более длинный ответ: __del__ на самом деле не является деструктором в смысле C ++, и вы, вероятно, не захотите его использовать.

Вместо этого, если вы требуется очистка, вам, вероятно, следует превратить объекты в менеджеры контекста (написав методы __enter__ и __exit__) и использовать их в операторе with и / или предоставить им методы close, которые необходимо вызывать явно. Большинство классов в Python и широко используемых библиотеках, которым необходимо освободить внешние ресурсы, делают и то, и другое (часто с помощью __enter__ return self и __exit__ call self.close()).

Со сборкой мусора , обычно нет необходимости освобождать какую-либо память, выделенную в __init__ или __new__, как это может быть сделано в C ++, поскольку она будет собираться автоматически.

Есть варианты использования метода __del__, но они редки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...