En/na Garito ha escrit:
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

Debería funcionar, pero la clase se está volviendo más compleja e ineficiente cada vez y la cosa no termina aquí. Si d es un yDict y d["a/b/c"] = "d"

* cual es el resultado de "a/b" in d ? Si la respuesta es True debes redefinir el método __contains__

* d.get("a/b") devuelve el yDict {"c":"d"} ? Si la respuesta es sí debes redefinir el método get

* d.keys() devuelve ["a"], ["a/b/c"] o ["a", "a/b", "a/b/c"] ? Si la respuesta no es ["a"] debes redefinir el método.

* que devuelve d.values(), los values de primer nivel ? los finales ?

* que ocurre si haces d["x/y"] = { "foo" : "bar" } ? d["x/y/foo"] == "bar" o dispara un KeyError ?


El uso de una estructura recursiva introduce una sobrecarga importante: por un lado se realizan un montón de llamadas a funciones y por otro debes garantizar que la estructura siga siendo recursiva al modificarla.


Llegado a este punto me plantearía si vale la pena seguir por este camino:

* ¿ realmente necesitas que yDict implemente toda la interfaz de un diccionario ?

* ¿ es imprescindible utilizar recursividad ?




Saludos
_______________________________________________
Python-es mailing list
Python-es@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Responder a