我有一个Python类C
,它应该有两个伪 - dict
s a
和b
。术语伪dicts意味着字典实际上并不存在,并且每次访问密钥时它们都会被“重新计算”。
在伪代码中,这看起来像这样:
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'
我可以为a
和b
实现一个类,但由于两者都只有一些简短的方法,我想知道是否有更优雅和紧凑的方法来实现这一点。
答案 0 :(得分:1)
为什么不定义自己的类?
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']
我不确定这些“伪词典”的值来自何处,因此您必须更新__getitem__
方法。
答案 1 :(得分:1)
喜欢这个吗?
from collections import defaultdict
class C:
a = defaultdict(lambda:'a')
b = defaultdict(lambda:'b')
c=C()
print c.a['foo']
print c.b['bar']
或者对于真正的计算函数可能是这样吗?
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']