【发布时间】:2012-01-05 20:45:29
【问题描述】:
我正在尝试为非常有用的collections.defaultdict 创建一个等效列表。以下设计效果很好:
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']
我应该在默认列表中添加什么以支持以下行为?
>>> dl = defaultlist(dict)
>>> dl[2]['a'] = 1
>>> dl
[{}, {}, {'a':1}]
【问题讨论】:
-
这个问题是this one的后续问题
-
我假设您只是在寻找为项目访问重载的方法(而不是项目分配)?
-
dl[2] = {'a', 1}不是更有意义吗?
标签: python list subclassing