__bool__ и __len__
- Сначала интерпретатор пытаеся вызвать __bool__. Если не находит, пытается вызвать __len__ и проверить результат на 0 (это будет False).
- Если не реализован ни один метод, объект считается True
__del__ - уничтожение объектов
Вызывается при вызове сборщика мусора для объекта. (Неизвестно когда будет вызван).
То есть может быть ситуация, что за все время работы программы __del__ не вызвали.
Поэтому если нужно, чтобы гарантированно очистка произошла, пишите try/finally блок.
- Что будет, если внутри __del__ возникнет исключение? Плохо будет, потому что сборщик мусора уже начал свою работу.
- циклические ссылки собираются автоматически, если в них нет метода __del__
Подробнее далее (TODO)
- ссылка на пример по __enter__ и __exit__ - менеджеры контеста с with;
- ссылка на пример по __get__ и __set__ - дескрипторы для методов чтения и записи значений атрибутов класса;
- ссылка на пример с исползованием __new__ в контексте метакласса.