[Python-es] Equivalente a __missing__ para el setter

Alexis Roda alexis.roda.villalonga en gmail.com
Sab Oct 9 23:13:27 CEST 2010


En/na Garito ha escrit:
> Me gustaria que el acceso a estas funciones sea recursivo

¿ por algún motivo en especial ?

 > La pregunta seria: hay alguna forma de cambiarle el tipo
 > (momentaneamente) sin crear otro objeto? O dicho de otra forma: puedo
 > hacer un cast momentaneo?

Creo que lo que buscas es 'super':

class yDict(dict) :
     def __getitem__(self, clave):
         partes = clave.split('/', 1)
         if len(partes) > 1 :
             return super(yDict, self).__getitem__(partes[0])[partes[1]]
         else:
             return super(yDict, self).__getitem__(partes[0])

     def __setitem__(self, clave, valor) :
         partes = clave.split("/", 1)
         if len(partes) > 1 :
             super(yDict, self).setdefault(partes[0], 
yDict())[partes[1]] = valor
         else :
             super(yDict, self).__setitem__(partes[0], valor)

¿Que debería ocurrir con este código?

d = yDict()
d["a/b"] = 1
d["a/b/c"] = 2



Saludos


Más información sobre la lista de distribución Python-es