Теоретически, setdefault
все равно было бы удобно, если бы вы иногда хотите установить значение по умолчанию, а иногда нет. В реальной жизни я не встречал такого случая использования.
Однако из стандартной библиотеки возникает интересный пример использования (Python 2.6, _threadinglocal.py):
>>> mydata = local()
>>> mydata.__dict__
{'number': 42}
>>> mydata.__dict__.setdefault('widgets', [])
[]
>>> mydata.widgets
[]
Я бы сказал, что использование __dict__.setdefault
это довольно полезный случай.
Изменить : Как это бывает, это единственный пример в стандартной библиотеке, и это в комментарии. Так что, может быть, этого недостаточно, чтобы оправдать существованиеsetdefault
. Тем не менее, вот объяснение:
Объекты хранят свои атрибуты в __dict__
атрибуте. Как это бывает, __dict__
атрибут доступен для записи в любое время после создания объекта. Это также словарь, а не defaultdict
. Для объектов в общем случае не имеет смысла иметь __dict__
это, defaultdict
потому что каждый объект имеет все юридические идентификаторы в качестве атрибутов. Поэтому я не могу предвидеть каких-либо изменений в объектах Python, от которых можно избавиться __dict__.setdefault
, за исключением полного удаления, если это будет сочтено бесполезным.