如何在Python中继承和扩展列表对象?

2024-06-22

我对使用 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(使用前将#替换为@)

如何在Python中继承和扩展列表对象? 的相关文章

随机推荐