我正在学习 python 类(class),并且正在尝试从 collections
模块创建我自己的 defaultdict
版本。这是我尝试过的:-
class Mydict(dict):
def __missing__(self, key):
self.key = []
return []
这是交互式 shell 的输出:-
>>> d = Mydict()
>>> d['x']
#outputs []
>>> d['x'].extend([1,2,3,4,5])
>>> print(d)
# Outputs {}
我不明白为什么它不在d
对象中存储 key x
?我想念什么?
最佳答案
编辑:
获取返回的存储值而不是新列表:
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
使用 __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__
或 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'}
关于python - 如何在python中实现自己的自定义字典类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54129922/