[Python-es] Equivalente a __missing__ para el setter
Alexis Roda
alexis.roda.villalonga en gmail.com
Mar Oct 12 14:50:35 CEST 2010
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
Más información sobre la lista de distribución Python-es