重写方法的利器-super
class ilist(list): def __init__(self,dft=None,r=list()): super(ilist, self).__init__(r) #list.__init__(self,r) self.dft=dft def __getitem__(self,n): while len(self) <= n: self.append(self.dft) return super(ilist, self).__getitem__(n)
x=ilist(0)print x[4]print xx[0]=10a=x[0]+x[1]print a
结果:
>>> 0[0, 0, 0, 0, 0]10
由于刚开始不知道super,我是这样模拟x[n]的:
class ilist(list): def __init__(self,dft=None,r=list()): list.__init__(self,r) self.dft=dft def __getitem__(self,n): while len(self) <= n: self.append(self.dft) for i,v in enumerate(self): if i==n: return v
就是用enumerate(self)蛮力遍历列表,当索引等于n时,就返回值v.
虽然也能达到目的,但是效率应该是非常低下了.