Python 3.4+weakrefпонятие
weakref.finalize
финализация
Регистрирует функцию, которая будет вызвана, когда объект удалят сборщиком, или при выходе из программы. Надёжная замена __del__.
Синтаксис
f = weakref.finalize(obj, func, *args, **kwargs)
Главная ошибка — передать в finalize метод самого объекта или лямбду, которая его захватывает: финализатор держит сильные ссылки на свою функцию и аргументы, и объект никогда не умрёт. Передавайте то, что нужно для уборки (имя файла, дескриптор), а не сам объект. Финализатор срабатывает один раз; f.alive показывает, ждёт ли он, а f() вызывает его досрочно — как close() у ресурса.
Примеры
import weakref
class TempFile:
pass
t = TempFile()
f = weakref.finalize(t, print, 'cleanup')
print(f.alive) # → True
del t
# → cleanup
print(f.alive) # → False
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности