Pseudo-dicts como propiedades
-
01-10-2019 - |
Pregunta
Tengo un C
clase Python que deben tener dos-dict
s seudo a
y b
. El término pseudo-Dicts medios que los diccionarios en realidad no existen y que son “vuelven a calcular” cada vez que se acceda a una tecla.
En este pseudocódigo sería el siguiente:
class C:
def a.__getitem__(self, key):
return 'a'
def b.__getitem__(self, key):
return 'b'
>>> c = C()
>>> c.a['foo']
'a'
>>> c.b['bar']
'b'
Me podría implementar una clase de a
y b
, pero ya que ambos tienen sólo unos pocos métodos cortos, me pregunto si hay una manera más elegante y compacto para hacer esto.
Solución
¿Por qué no definir su propia clase?
class PseudoDict(object):
def __init__(self, c):
self.c = c
def __getitem__(self, key):
return self.c.somethingmagical()
class C(object):
def __init__(self):
self.a = PseudoDict(self)
self.b = PseudoDict(self)
c = C()
print c.a['foo']
print c.b['bar']
No estoy seguro de que los valores de estos 'pseudo-predice' están viniendo, por lo que tendrá que actualizar el método __getitem__
.
Otros consejos
¿Así?
from collections import defaultdict
class C:
a = defaultdict(lambda:'a')
b = defaultdict(lambda:'b')
c=C()
print c.a['foo']
print c.b['bar']
O tal como esto para funciones de cálculo real?
from collections import defaultdict
class C:
def __init__(self):
self.a = defaultdict(self.geta)
self.b = defaultdict(self.getb)
def geta(self):
return 'a'
def getb(self):
return 'b'
c=C()
print c.a['foo']
print c.b['bar']
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow