[Python-es] Equivalente a __missing__ para el setter

Garito garito en gmail.com
Lun Oct 11 15:32:30 CEST 2010


Eso es justo lo que me queria evitar con un casting pero parece que eso no
es posible en python, cierto?

Podria ser esto otra forma:

En el __setitem__ del yDict habria que poner un trozo de codigo que
recorriese los dict para convertirlos a yDict

Gracias!

El 11 de octubre de 2010 10:15, Alexis Roda <
alexis.roda.villalonga en gmail.com> escribió:

> 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
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>



-- 
Mi twitter: http://twitter.com/garito

Temet nosce
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20101011/804e6afe/attachment.html>


Más información sobre la lista de distribución Python-es