Позволяет определить поведение экземпляра пользовательского типа при готовности интерпретатора уничтожить его.
object.__del__(self)
self -- Ссылка на экземпляр.

Вызывается интерпретатором, когда экземпляр назначен к уничтожению. Также известен под именем «деструктор».
Если метод определён в базовом классе, то потомок должен вызывать его явно, чтобы удаление части экземпляра, реализуемой базовым классом произошло без ошибок.

Обратите внимание, что есть возможность (но не рекомендуется) в методе создать новую ссылку на экземпляр, чтобы отсрочить его уничтожение. В следующий раз, когда экземпляр будет назначен к уничтожению, метод будет вызван снова.

Не гарантируется, что метод будет вызван для объектов, всё ещё существующих на момент выхода интерпретатора.

Вызов del x не приводит напрямую к вызову x.__del__(), а лишь уменьшает значение счётчика ссылок на единицу. Описываемый метод же будет вызван, только когда счётчик ссылок достигнет нуля.

Вот некоторые обстоятельства, которые могут помешать счётчику дойти до нуля:

  • Циклические ссылки (двусвязные списки; древовидные структуры, со ссылками на родителей и детей) — исправляется только разрывом таких ссылок. Циклические ссылки, являющиеся мусором, отлавливаются обнаружителем циклов (он включен по умолчанию), однако могут быть вычищены, только если не заданы __del__() на уровне Питона. За более подробным описанием того, как __del__() влияет на обнаружитель циклов, можно узнать из документации к модулю gc.

  • Ссылка на объект в фрейме стека при возбуждении исключения (трассировка стека, хранимая в sys.exc_info()[2] (-py3.0 sys.exc_traceback) продлевает жизнь фрейма) — исправляется путём освобождения ссылки на объект трассировки, когда в нём более нет надобности (-py3.0 sys.exc_traceback = None).

  • В интерактивном режиме ссылка на объект в фрейме стека, где возбуждено необработанное исключение (трассировка стека, хранимая в sys.last_traceback продлевает жизнь фрейма) — исправляется путём sys.last_traceback = None.

Внимание
Ввиду того, что вызов метода зависит от множества обстоятельств, исключения, возбуждаемые в ходе его исполнения игнорируются, при этом в sys.stderr пишется предупреждение.

Кроме того, когда метод вызывается как реакция на удаление модуля (например, когда исполнение программы завершено), другие глобальные переменные, которые могут быть использованы в методе могут быть уже удалены или находится в процессе удаления (например, при завершение работы механизма импорта). Потому в реализации методов резонно использовать минимум окружения. +py1.5 Питон гарантирует, что глобальные переменные, имена которых начинаются с одиночного почерка, удаляются из модуля прежде остальных. Поэтому если на такие объекты нет ссылок, то они могут являться показателем доступности других объектов модуля на момент исполнения метода.
Синонимы поиска: object.__del__, object, __del__, деструктор деструкторы
На заметку
Зарегистрированные пользователи могут получать еженедельный дайджест обновлений на сайте.