Edit:
要获取返回的存储值而不是新列表:
In [143]: class Mydict(dict):
...: def __missing__(self, key):
...: self.__setitem__(key, [])
...: return self[key]
...:
In [144]: d = Mydict()
In [145]: d[2].extend([1, 2, 3])
In [146]: d[2]
Out[146]: [1, 2, 3]
dict
uses __setitem__
设置键值对,因此您需要使用它而不是设置属性:
In [113]: class Mydict(dict):
...: def __missing__(self, key):
...: self.__setitem__(key, [])
...: return []
...:
In [114]: d = Mydict()
In [115]: d[1]
Out[115]: []
In [116]: d
Out[116]: {1: []}
FWIW,你可以使用d.__dict__
or vars(d)
获取您通过通常方式设置的属性字典:
In [117]: class Mydict(dict):
...: def __missing__(self, key):
...: self.__setattr__(key, 'foo')
...: self.__setitem__(key, 'bar')
...: return []
...:
In [118]: d = Mydict()
In [119]: d['x']
Out[119]: []
In [120]: d
Out[120]: {'x': 'bar'}
In [121]: vars(d)
Out[121]: {'x': 'foo'}