重写方法的利器-super
重写方法的利器-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 x x[0]=10 a=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.
虽然也能达到目的,但是效率应该是非常低下了.