[Python-es] Equivalente a __missing__ para el setter
Garito
garito en gmail.com
Mar Oct 12 19:27:05 CEST 2010
Errata
'a/b' in d -> True
Perdon por la pajara mental! (me he repasado el texto 2 veces pero he
encontrado la errata a la 3a que ya era despues de enviar)
Disculpas
El 12 de octubre de 2010 19:24, Garito <garito en gmail.com> escribió:
> Hola Alexis!
> En realidad lo que busco es poder hacer con un diccionario lo que se puede
> hacer en un entorno web: utilizar urls para los getters y los setters igual
> que utilizo urls para los GET y POST del web
>
> Mi intencion de que sean tan recursivos como se pueda es porque en un arbol
> en el que se defina el nodo como clase si que hay una ventaja muy grande al
> hacerlos recursivos y un diccionario es el arbol mas simple que existe para
> python
>
> Yo, en mi estilo que programacion, quiero poder usar
>
> a['a/b/c'] = 'un valor'
> a['a/b/c'] -> 'un valor'
> hasattr('a/b/c') -> True
>
> y poco mas
>
> A tus preguntas:
>
> 'a/b' in d -> False puesto que d no es ni un contenido de a y b. En todo
> caso 'c' in d['a/b'] seria True
>
> d.get('a/b') es una construccion que no utilizo pero supongo que igual que
> una vez hecho el __getitem__ hacer el getattr es sobre cargar el __missing__
> llamando al __getitem__ ya definido, intuyo que se puede hacer lo mismo con
> el get utilizando 2 lineas de codigo (algo asumible)
>
> def get(self, valor):
> return self.__getitem__(valor)
>
> d.keys() -> ['a'] puesto que el primer nivel del arbol solo contiene a. Lo
> que si que querria seria d['a/b'].keys() -> ['c']
>
> d.values() -> [{'b': {'c': 'un valor'}}] igual que devolveria un dict
> normal
>
> Si d['x/y'] = {'foo': 'bar'} entonces d['x/y/foo'] == 'bar' -> True puesto
> que el valor para la url x/y/foo en ese diccionario es bar
>
> Como puedes ver mi yDict se comportaria exactamente igual que un
> diccionario pero en los getter y setter quiero tener la opcion de que se
> comporten como un servidor web pues eso es lo que estoy programando
>
> Quiero poder utilizar la frase de que TODO ES UNA URL
>
> Y en cuanto a la recursividad en este caso las ventajas en un diccionario
> son poco claras puesto que el codigo resultante de hacerlo recursivo a no
> hacerlo es practicamente del mismo tamaño (que no complejidad)
>
> Entonces porque recursivo? Porque el arbol es un fractal y el mecanismo de
> fractalidad en la programacion es la recursividad pero este concepto no es
> el que mas solemos dominar los programadores asi que cuanto mas y mas
> profundamente este implementado este concepto mas natural acabara siendo (un
> solo modo de pensar es mas simple que varios)
>
> En cuanto a la programacion de un servidor web recursivo la cosa cambia
> pues la diferencia de cantidad de codigo y de complejidad si que son muy
> diferentes de programarlo de una forma u otra (y, en este caso, la
> recursividad gana de goleada una vez integrado el concepto en nuestro coco)
>
> Despues de 7 años reprogramando mi manera de ver las cosas en la
> informatica (y en la vida), el fractal arbol emergio con tanta potencia que
> no tengo ninguna duda de lo que estoy diciendo (tendrias que ver los codigos
> que llegue a hacer antes de darme cuanta de esto! Y tu, en concreto, ya
> estuviste en contacto con esta busqueda en la lista de zope! Y ya entonces
> me decias que igual deberia cambiar mi forma de ver las cosas!!! ;) )
>
> Pues te parecera una chorrada y/o una frivolidad pero es que he llegado a
> soñar con el codigo cuando estuviese escrito del todo!!! Y era
> recursivo!!!!!! (no se me quita de la cabeza la parte en que aparecia self()
> en el sueño)
>
> Que me puedo estar equivocando? SI!!! puede ser. Pero deberias ver lo bien
> que se programa cuando utilizas un arbol como codigo fuente!! ->
> http://www.flickr.com/photos/92578281@N00/tags/yanged/
>
> Y las pedazo de ventajas que tiene para programar!!! Y para grupos de
> trabajo distribuidos!!! Estuve haciendo un arbol con un amigo en
> http://www.mindmeister.com/ con el colega al Skype y los dos modificando
> el arbol a la vez y en 1/2 hora teniamos hecho el trabajo de 4!!!!!
>
> Como voy a dejar esta manera de pensar cuando no paran de surgir nuevas
> ventajas dia tras dia???!!!
> Como voy a dejar esta manera de pensar cuando los cientificos no paran de
> encontrar fractales en la realidad???!!!
> La realidad misma es un fractal!!!
>
> Saludos y muchisimas gracias por tu interes. Si huviese tenido una charla
> asi hace 6 años ahora haria ese tiempo que Yanged (mi proyecto) seria una
> tecnologia mas del ecosistema actual
>
> El 12 de octubre de 2010 14:50, Alexis Roda <
> alexis.roda.villalonga en gmail.com> escribió:
>
> 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 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
>
--
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/20101012/2e3942b4/attachment.html>
Más información sobre la lista de distribución Python-es