3

我有一个 Python 类C,它应该有两个伪dictsab. 术语伪字典意味着字典实际上并不存在,并且每次访问键时都会“重新计算”它们。

在伪代码中,这看起来像这样:

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我可以为and实现一个类b,但由于两者都只有几个简短的方法,我想知道是否有更优雅和更紧凑的方法来做到这一点。

4

2 回答 2

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__方法。

于 2010-08-26T06:32:59.710 回答
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']
于 2010-08-26T14:26:32.727 回答