我正在尝试定义一个默认的样式列表对象:
class ilist(list):
def __init__(self,r=list(),dft=None):
list.__init__(self,r)
self.dft=dft
def __getitem__(self,n):
if len(self)<=n:
for i in range(n-len(self)+1):
self.append(self.dft)
for i,v in enumerate(self):
if i+1==len(self):
return v
x=ilist()
print x[4]
print x
它有效。
>>>
None
[None, None, None, None, None]
但我认为查询我的ilist是可怕的。
我尝试了以下方法:
def __getitem__(self,n):
from operator import getitem
if len(self)<=n:
for i in range(n-len(self)+1):
self.append(self.dft)
return getitem(self,n)
但事实表明它完全等同于self [n],并导致RuntimeError:递归深度超过最大值。
我还尝试借用父类list的方法,但格式是x.__getitem__(y)。我不知道如何适应ilist。
所以最终我的可怕解决方案出现了。原始且粗暴...有没有更有效或简单的解决方案?提前致谢。
super
方法。哦,我猜这就是为什么它被称为super
的原因... - tcpiper