1

定義済みの有効なキーのセットを使用して、2 つの異なる辞書を実装したいと考えています。また、一方のディクショナリにはもう一方のディクショナリが含まれています。

class Otherdict (dict):

    _keys = ['A','B']

    def __init__(self):
        for key in self._keys:
            self[key] = None

    def populateDict(self):
        self['B'] = 10
        self['A'] = 12

class MyDict(dict):

    _keys = ['R','ED']

    def __init__(self):
        for key in self._keys:
            self[key] = None

    def __getitem__(self, key):
        if key not in self._keys:
            raise Exception("'" + key + "'" + " is not a valid key")
        dict.__getitem__(self,key)

    def __setitem__(self, key, value):
        if key not in self._keys:
            raise Exception("'" + key + "'" + " is not a valid key")
        dict.__setitem__(self,key,value)

    def populateDict(self):
        d = Otherdict()
        d.populateDict()
        self['R'] = 3
        self['ED'] = d


a = MyDict()
a.populateDict()
print a['ED'].__class__    #prints <type 'NoneType'>

問題は、何らかの理由で「ED」キーの下にある辞書にアクセスできないことです。ここで何が間違っていますか?

__getitem__()メソッドを削除すると、コードが正しく機能することにも気付きました

4

2 に答える 2

8

__getitem__値を返す必要があります:

def __getitem__(self, key):
    if key not in self._keys:
        raise Exception("'" + key + "'" + " is not a valid key")
    return dict.__getitem__(self,key)

明示的な return ステートメントがない場合、Python 関数はデフォルトで None を返します。

于 2012-06-26T09:38:00.097 に答える
3

returnで使用def __getitem__(self, key) : return dict.__getitem__(self,key),

コードを削除すると、コードが正しく実行されます。これは、親クラス (この場合)から__getitem__アクセスするためです。__getitem__dict

于 2012-06-26T09:42:02.377 に答える