我创建了一个生成向量的 python 程序。现在我想使用函数__setitem__
和__getitem__
设置项目。例如,如果vector = Vec()
andvector[3] = 26
会将空向量更改为[0, 0, 0, 26]
。我需要覆盖 __getitem__
和 __setitem__
我已经列出了下面的代码,但是我在使用 get 和 set 函数时遇到了问题。有什么建议吗?
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]
最佳答案
你有几个问题:
extend
本质上是在原始向量的末尾附加一个新向量,而不是增加原始向量的长度。不清楚它是否需要返回修改后向量的字符串表示形式(除非它只是为了调试目的)。def extend(self, newlength): # Assume newlength is greater than the old self.vector.extend([0] * (newlength - len(self)))
__setitem__
如果key过大需要调用extend
。def __setitem__(self, key, item): if key >= len(self): self.vector.extend(key+1) self.vector[key] = item
__getitem__
需要访问底层列表,而不是使用未定义的属性def __getitem__(self, key): # It's probably better to catch any IndexError to at least provide # a class-specific exception return self.vector[key]
关于python - setitem 和 getitem -- python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20356401/