[英]Class polynomial
我正在学习Python中的类,创建了一个称为多项式的类,并试图添加两个多项式,但始终收到以下错误消息
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
添加时没有使用内部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
另外,请勿在__init__
签名中初始化termos
列表,因为它将始终引用同一列表。 相反,将其声明为None
并在未通过时将其构建为新的,即:
def __init__ (self, termos = None, n = 0):
self.termos = termos or []
self.n = [0] * n
您应该添加方法__getitem__
:
def __getitem__(self, i):
return self.termos[i]
而且在你的__add__
功能,您实例化一个Polinomio
说n = len(self.termos)
但是你用一种叫做关键字参数,所以它实际上不会实例化一个Polinomio
与n
为len(self.termos
,则应该说Polinomio([], len(self.termos)
或实现关键字参数,如果您想使用该语法来实例化它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.