[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