我想用一组预定义的有效键来实现两个不同的词典。另外,一个字典包含另一个字典。
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__()
方法,代码就能正常运行
答案 0 :(得分: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。
答案 1 :(得分:3)
在return
中使用def __getitem__(self, key)
:return dict.__getitem__(self,key)
,
当您删除__getitem__
时,代码会正常运行,因为它会从父类(在这种情况下为__getitem__
)访问dict
。