Также есть класс, рисующий GUI на tkinter (gui). В нём на событие закрытия окна забинден отдельный метод, который выполняет сохранение в объект класса настроек с последующим выходом из программы.
Так метод забиден
parent.protocol("WM_DELETE_WINDOW", self._update_config_and_close)
self.root.after(1000, self.root.quit)
Я создаю объект вышеупомянутого config и передаю его в конструктор gui, чтобы тот считывал и записывал в него настройки.
Но когда я закрываю окно tkinter'а (стандартно, в Windows, путём нажатия на красный крестик) и программа завершается с кодом 0 (т.е. всё в порядке) - сохранения конфига в файл не происходит.
Но если я вставляю в самом конце программы вызов деструктора вручную, то настройки нормально сохраняются:
config.__del__()
Похоже что без ручного вызова, деструктор не вызывается. Как такое может быть? Я всегда полагал, что деструктор обязательно должен вызваться до конца программы, чтобы подчищать ресурсы и т.д. Или интерпретатор python'а может в некоторых случаях игнорировать вызов деструкторов? (типа “а зачем, всё равно программа закрывается, а память и операционка подчистить может”)