我想使用Python的列表对象,但需要略微修改其功能。特别是,我希望将列表从0索引更改为1索引。例如:
>> mylist = MyList()
>> mylist.extend([1,2,3,4,5])
>> print mylist[1]
输出应为:1
但是当我更改了__getitem__()
和__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
。有什么想法吗?如果您能指导我学习这方面的好教程,那就太棒了!谢谢!
list
的地方使用它,那么子类化list
可能并没有太多价值。也许在这种情况下,采用组合会是更合适的策略? - Ken__getitem__
和__setitem__
,那么会有问题吗? - mindthieflist
的现有接口(即您在此处要求的),那么就无法将MyList
替换为list
。即使是像x[0]
这样基本的事情也无法正常工作。 - Ken