我对使用 python 列表对象感兴趣,但功能略有改变。特别是,我希望该列表是 1 索引而不是 0 索引。例如。:
>> mylist = MyList()
>> mylist.extend([1,2,3,4,5])
>> print mylist[1]
输出应该是:1
但是当我改变了__getitem__()
and __setitem__()
方法来做到这一点,我得到了RuntimeError: maximum recursion depth exceeded
错误。我对这些方法进行了很多修改,但这基本上就是我所拥有的:
class MyList(list):
def __getitem__(self, key):
return self[key-1]
def __setitem__(self, key, item):
self[key-1] = item
我想问题是self[key-1]
本身调用它定义的相同方法。如果是这样,我该如何让它使用list()
方法而不是MyList()
方法?我尝试使用super[key-1]
代替self[key-1]
但这导致了投诉TypeError: 'type' object is unsubscriptable
有任何想法吗?另外,如果您能为我指出一个很好的教程,那就太好了!
Thanks!
Use the super()
function 调用基类的方法,或者直接调用该方法:
class MyList(list):
def __getitem__(self, key):
return list.__getitem__(self, key-1)
or
class MyList(list):
def __getitem__(self, key):
return super(MyList, self).__getitem__(key-1)
但是,这不会改变其他列表方法的行为。例如,索引保持不变,这可能会导致意外结果:
numbers = MyList()
numbers.append("one")
numbers.append("two")
print numbers.index('one')
>>> 1
print numbers[numbers.index('one')]
>>> 'two'
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)