我正在用Python学习类,我创建了一个名为polynomial的类,我试图添加两个多项式,但总是得到以下错误信息
soma.termos [i] = self [i] + other [i] TypeError:' Polinomio'宾语 不支持索引修复
修复我创建了一个属性,该属性是向量的大小,并创建一个大小为n的零的向量,但仍然是,错误仍然存在,出了什么问题?
class Polinomio:
def __init__ (self, termos = [], n = 0):
self.termos = termos
self.n = [0] * n
def __len__ (self):
return len(self.termos)
def __setitem__ (self, i, x):
self.termos[i] = x
def __add__ (self, other):
soma = Polinomio(n = len(self.termos))
for i in range(len(self.termos)):
soma.termos[i] = self[i] + other[i]
def print (self):
print(self.termos)
p1 = Polinomio([1, 2, 3])
p2 = Polinomio([1, 2, 3])
p2.print()
p3 = Polinomio()
p3 = p1 + p2
答案 0 :(得分:3)
您在添加时未使用内部termos
属性,而是尝试索引整个实例,这不足为奇,会引发错误。尝试将__add__
方法更改为:
def __add__ (self, other):
soma = Polinomio(n = len(self.termos))
for i in range(len(self.termos)):
soma.termos[i] = self.termos[i] + other[i]
return soma
甚至更好:
def __add__ (self, other):
soma = Polinomio(n = len(self.termos))
for i, v in enumerate(self.termos):
soma.termos[i] = v + other[i]
return soma
此外,请勿在{{1}}签名中初始化您的termos
列表,因为它始终会引用相同的列表。相反,将其声明为__init__
并在未通过时将其构建为新的,即:
None
答案 1 :(得分:1)
您应该添加方法x=35
:
__getitem__
同样在您的def __getitem__(self, i):
return self.termos[i]
函数中,您通过说__add__
来实例化Polinomio
,但是您使用了一个名为关键字参数的东西,因此它实际上不会实例化n = len(self.termos)
Polinomio
为n
,如果您想使用该语法来实例化它,则应该说len(self.termos
或实现关键字参数。