[Python-es] Equivalente a __missing__ para el setter
Alexis Roda
alexis.roda.villalonga en gmail.com
Lun Oct 11 10:15:06 CEST 2010
En/na Garito ha escrit:
> yDict({"a": {"b": {"c": "abc"}}}) -> {'a': {'b': {'c': 'abc'}}}
Para que yDict funcione todo valor que no sea "final" debe ser a su vez
un yDict (es una estructura recursiva). Si pasas una serie de
diccionarios anidados al constructor este no los convierte en yDict.
Para verlo más claro añade el método:
def __repr__(self) :
return "<yDict {%s}>" % ", ".join(
["%r : %r" % (k, v) for k, v in self.items()]
)
In [1]: d = yDict({"a": {"b": {"c": "abc"}}})
In [2]: d
Out[2]: <yDict {'a' : {'b': {'c': 'abc'}}}>
In [3]: dd = yDict()
In [4]: dd["a/b/c"] = "abc"
In [5]: dd
Out[5]: <yDict {'a' : <yDict {'b' : <yDict {'c' : 'abc'}>}>}>
En [2] los diccionarios "interiores" no son instancias de yDict, en [5]
sí. Deberás redefinir '__init__' para que la instancia se inicialice
correctamente. También deberás redefinir el método 'setdefault' y
posiblemente otros para garantizar que la semántica de yDict sea
consistente.
Saludos
Más información sobre la lista de distribución Python-es