[Python-es] Equivalente a __missing__ para el setter
Oswaldo Hernández
listas en soft-com.es
Vie Oct 8 21:54:51 CEST 2010
El 08/10/2010 20:43, Garito escribió:
> Hola!
> Estoy sobrecargando un diccionario
> Quiero poder hacer cosas como
>
> a['a/b/c'] = 'abc'
> y que devuelva
> {'a': {'b': {'c': 'abc'}}}
>
> para luego poder hacer
> a['a/b/c']
> y que devuelva
> abc
>
> El getter lo tengo ya funcionando usando __getattr__ y __missing__
> Tambien tengo el __seattr__ con lo que puedo hacer
> setattr(a, 'a/b/c', 'abc')
> funcionando correctamente pero me pregunto como tengo que programar el
> asunto para poder hacer lo de la 1a orden
> a['a/b/c'] = 'abc'
>
> Alguien sabe como?
>
Con __setitem__, __getitem__ puedes manipular las claves y valores que
se pasan al diccionario:
>>> class miDict(dict):
... def __setitem__(self, key, val):
... super(miDict, self).__setitem__("KEY_%s" % key, val)
... def __getitem__(self, key):
... return super(miDict, self).__getitem__("KEY_%s" % key)
...
>>> d = miDict()
>>> d["a"] = "A"
>>> d
{'KEY_a': 'A'}
>>> d["a"]
'A'
--
Oswaldo Hernández
Más información sobre la lista de distribución Python-es