如何在Python中继承和扩展列表对象? [英] How to inherit and extend a list object in Python?
问题描述
我对使用python列表对象感兴趣,但功能稍有改动。特别是,我希望列表是1索引而不是0索引。例如:
I am interested in using the python list object, but with slightly altered functionality. In particular, I would like the list to be 1-indexed instead of 0-indexed. E.g.:
>> mylist = MyList()
>> mylist.extend([1,2,3,4,5])
>> print mylist[1]
输出应为:1
但当我更改 __ getitem __()
和 __ setitem __()
方法时,我得到了a RuntimeError:超出最大递归深度
错误。我对这些方法进行了很多修改,但这基本上就是我在那里所做的:
But when I changed the __getitem__()
and __setitem__()
methods to do this, I was getting a RuntimeError: maximum recursion depth exceeded
error. I tinkered around with these methods a lot but this is basically what I had in there:
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'对象是unsubscriptable
I guess the problem is that self[key-1]
is itself calling the same method it's defining. If so, how do I make it use the list()
method instead of the MyList()
method? I tried using super[key-1]
instead of self[key-1]
but that resulted in the complaint TypeError: 'type' object is unsubscriptable
有什么想法吗?另外,如果你能指出一个很好的教程,那就太棒了!
Any ideas? Also if you could point me at a good tutorial for this that'd be great!
谢谢!
推荐答案
使用 super()
函数调用基类的方法,或直接调用该方法:
Use the super()
function to call the method of the base class, or invoke the method directly:
class MyList(list):
def __getitem__(self, key):
return list.__getitem__(self, key-1)
或
class MyList(list):
def __getitem__(self, key):
return super(MyList, self).__getitem__(key-1)
但是,这不会改变其他列表方法的行为。例如,索引保持不变,这可能导致意外结果:
However, this will not change the behavior of other list methods. For example, index remains unchanged, which can lead to unexpected results:
numbers = MyList()
numbers.append("one")
numbers.append("two")
print numbers.index('one')
>>> 1
print numbers[numbers.index('one')]
>>> 'two'
这篇关于如何在Python中继承和扩展列表对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!