質問

Pythonクラスがあります C 2つの疑似が必要です -dicts ab. 。擬似命令という用語は、辞書が実際に存在せず、キーにアクセスするたびに「再計算」されることを意味します。

Pseudocodeでは、これは次のようになります。

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'

クラスを実装できます ab, 、しかし、どちらもいくつかの短い方法を持っているので、これを行うためのよりエレガントでコンパクトな方法があるのだろうかと思います。

役に立ちましたか?

解決

なぜあなた自身のクラスを定義しないのですか?

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

他のヒント

このような?

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']
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top