我目前正在使用由我的教授开发的Python语言编写源到源编译器。一切顺利,但是一些语言特质让我很生气。源语言有1个索引列表和不同的切片规则,Python使用(更加理智)0索引列表。
有没有办法可以替换Python使用的列表实现?以下给出了我想要的想法。
class MyList(list):
# My implementation of 1-indexed lists
pass
x = ["foo", "bar", "baz"]
y = MyList(["foo", "bar", "baz"])
assert type(x) == type(y) # Should work
assert x[1] == "foo" # Should work
我想使用语法gly python给我一个列表,而不是处理我自己生成它。我知道我通常不会在实际代码中这样做,但除了我目前的需要,我想知道一个漂亮而优雅的解决方案。我认为要么摆弄 list 的元类,要么在运行时改变它的功能。有没有什么方法可以做到这一点并从列表中扩展MyList,因为它使用了引擎盖下的列表方法?
答案 0 :(得分:0)
您可以将一个列表包装在一个类中,并实现__len__
和__getitem__
之类的特殊container-related method names。以下是您可以实现的内容:
class MyList(object):
def __init__(self):
self._data = list()
def __getitem__(self, index):
return self._data[index+1]
def __len__(self):
return len(self._data)