Это стандартная ловушка модели данных для настройки действий оператора del obj.attr
вместо (или в дополнение к) удаления атрибута из экземпляра __dict__
. Таким образом, пользовательский код может свободно реализовывать то, что он хочет!
В качестве примера, вы можете использовать его как функцию «мягкого удаления», например, чтобы скрыть атрибут из публичного доступа, фактически не удаляя данные за ним. Лично я использовал его для аннулирования кэшей, когда соответствующий метод атрибута get имеет перед ним слой кэширования.
Для примера stdlib рассмотрим класс Mock
. По умолчанию экземпляры макетов будут генерировать дочерние макеты для любого доступа к атрибуту. Общедоступный API для «отказа» от дочернего макета, автоматически генерируемого для определенного имени, реализован через пользовательский __delattr__
.
>>> from unittest.mock import Mock
>>> mock = Mock()
>>> del mock.attr2 # prevent mock.attr2 from working
>>> mock.attr1
<Mock name='mock.attr1' id='4414043216'>
>>> mock.attr2
AttributeError: attr2