在给出的示例中,您首先尝试检索列表中不存在的值,就像这样做一样dl[2]['a']
,Python首先检索列表中的第三个(索引2)元素,然后继续在该列表中获取名为“ a”的元素对象-因此,您还必须实现对__getitem__
方法的自动扩展行为,如下所示:
class defaultlist(list):
def __init__(self, fx):
self._fx = fx
def _fill(self, index):
while len(self) <= index:
self.append(self._fx())
def __setitem__(self, index, value):
self._fill(index)
list.__setitem__(self, index, value)
def __getitem__(self, index):
self._fill(index)
return list.__getitem__(self, index)