Python Glossary English

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Сообщить о неточности