Teóricamente hablando, setdefault
todavía sería útil si veces desea establecer un valor predeterminado y, a veces no. En la vida real, no he encontrado ese caso de uso.
Sin embargo, un caso de uso interesante surge de la biblioteca estándar (Python 2.6, _threadinglocal.py):
>>> mydata = local()
>>> mydata.__dict__
{'number': 42}
>>> mydata.__dict__.setdefault('widgets', [])
[]
>>> mydata.widgets
[]
, diría que el uso de __dict__.setdefault
es un caso bastante útil.
Editar: Como es el caso, este es el único ejemplo en la biblioteca estándar y está en un comentario. Entonces puede ser que no es suficiente justificar la existencia de setdefault
. Aún así, aquí hay una explicación:
Los objetos almacenan sus atributos en el atributo __dict__
. Como sucede, el atributo __dict__
es grabable en cualquier momento después de la creación del objeto. También es un diccionario no es defaultdict
. No es sensato que los objetos en el caso general tengan __dict__
como defaultdict
porque eso haría que cada objeto tenga todos los identificadores legales como atributos. Por lo tanto, no puedo prever ningún cambio en los objetos de Python que eliminen __dict__.setdefault
, además de eliminarlo por completo si se considera que no es útil.
Ligeramente relacionados demasiado http://stackoverflow.com/questions/7423428/python-dict-get-vs- setdefault/22326645 – Medorator