__bool__ и __len__

  • Сначала интерпретатор пытаеся вызвать __bool__. Если не находит, пытается вызвать __len__ и проверить результат на 0 (это будет False).
  • Если не реализован ни один метод, объект считается True

__del__ - уничтожение объектов

Вызывается при вызове сборщика мусора для объекта. (Неизвестно когда будет вызван).

То есть может быть ситуация, что за все время работы программы __del__ не вызвали.

Поэтому если нужно, чтобы гарантированно очистка произошла, пишите try/finally блок.

  • Что будет, если внутри __del__ возникнет исключение? Плохо будет, потому что сборщик мусора уже начал свою работу.
  • циклические ссылки собираются автоматически, если в них нет метода __del__

Подробнее далее (TODO)

  • ссылка на пример по __enter__ и __exit__ - менеджеры контеста с with;
  • ссылка на пример по __get__ и __set__ - дескрипторы для методов чтения и записи значений атрибутов класса;
  • ссылка на пример с исползованием __new__ в контексте метакласса.

results matching ""

    No results matching ""