Является ли object .__ del __ (self) наиболее подходящим местом для очистки класса журналирования? - PullRequest
1 голос
/ 04 октября 2011

У меня есть собственный класс ведения журнала для моего скрипта Python с методом flush(), который print() s содержит содержимое списка.

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

[...], когда del () вызывается в ответ на удаление модуля (например,когда выполнение программы завершено), другие глобальные переменные, на которые ссылается метод del (), возможно, уже были удалены или находятся в процессе разрушения (например, завершение работы механизма импорта).

Кто-нибудь порекомендует другой способ сделать это, и если да, то почему?

1 Ответ

1 голос
/ 05 октября 2011

Возможно, вы захотите сделать этот регистратор контекстным менеджером . Это все еще не смоет в случае аварийного завершения, но мало что изменится. Но __del__ может не вызываться для объектов даже при обычном завершении.

Регистраторы могут быть одной из тех вещей, которые плохо подходят при использовании оператора with, так как они довольно глобальны, поэтому не уверен, что менеджер контекста подходит.

...