我正在尝试为非常有用的^{
class defaultlist(list):
def __init__(self, fx):
self._fx = fx
def __setitem__(self, index, value):
while len(self) <= index:
self.append(self._fx())
list.__setitem__(self, index, value)
以下是使用方法:
>>> dl = defaultlist(lambda:'A')
>>> dl[2]='B'
>>> dl[4]='C'
>>> dl
['A', 'A', 'B', 'A', 'C']
为了支持以下行为,我应该向defaultlist添加什么?
>>> dl = defaultlist(dict)
>>> dl[2]['a'] = 1
>>> dl
[{}, {}, {'a':1}]
在您给出的示例中,首先尝试检索列表中不存在的值,正如您所做的那样,
dl[2]['a']
,Python首先检索列表中的第三个(索引2)元素,然后继续在该对象上获取名为“a”的元素,因此您还必须实现对__getitem__
方法的自动扩展行为,如下所示:有一个可用的python包:
默认情况下,添加的索引将填充为“无”。
切片和负片也同样支持
可以通过lambda创建简单的工厂函数。
还可以实现先进的工厂功能:
有关详细信息,请参阅Documentation。
相关问题 更多 >
编程相关推荐