3

私は、2つのC疑似 と を持つべきPythonクラスを持っています。疑似辞書という用語は、辞書が実際には存在せず、キーがアクセスされるたびに「再計算」されることを意味します。dictab

擬似コードでは、これは次のようになります。

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が、どちらもいくつかの短いメソッドしかないため、これを行うためのよりエレガントでコンパクトな方法があるかどうか疑問に思います。

4

2 に答える 2

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 に答える
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 に答える