【发布时间】:2013-12-03 16:24:20
【问题描述】:
我创建了一个生成向量的 python 程序。现在我想使用函数__setitem__ 和__getitem__ 设置一个项目。例如,如果vector = Vec()andvector[3] = 26 会将空向量更改为[0, 0, 0, 26]。我需要覆盖__getitem__和__setitem__ 我已经列出了下面的代码,但是我在获取和设置函数时遇到了问题。有什么建议吗?
class Vec:
def __init__(self, length = 0):
self.vector = [0]*length
def __str__(self):
return '[{}]'.format(', '.join(str(i) for i in self.vector))
#This formats the output according to the homework.
#Adds '[' and ']' and commas between each 0
def __len__(self):
return len(self.vector)
def extend(self, newLen):
self.vector.append([0]*newLen)
return (', '.join(str(j) for j in self.vector))
def __setitem__(self, key, item):
self.vector[key] = item
def __getitem__(self, key):
return self.vector[key]
【问题讨论】:
-
你到底遇到了什么麻烦?
-
我无法更改向量中的键和项目,因为我认为我应该能够。你看到什么了吗?
-
@user3014014 我认为这是一个学习练习,你不能只从
list继承,如your other question 所示? -
未来提示:如here 所示,
str.join使用列表解析比使用生成器表达式运行得更好。 -
请解释得比“不能”更好,看看一个完整的例子和堆栈跟踪会非常有用,例如:>>> v = Vec() >>> v[3] = 26 Traceback(最近一次调用最后):文件“
”,第 1 行,在 v[3] = 26 文件“C:\Users\S\Desktop\test.py”,第 18 行, in setitem self.vector[key] = item IndexError: list assignment index out of range >>>