类多项式

2024-09-28 19:08:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用Python学习类,我创建了一个名为polymonic的类,并试图添加两个多项式,但总是得到以下错误消息

soma.termos[i] = self[i] + other[i] TypeError: 'Polinomio' object does not support indexing to fix

为了解决这个问题,我创建了一个与向量大小相等的属性,并创建了一个大小为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

Tags: self消息lendef错误向量otherprint
2条回答

添加时没有使用内部的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

甚至更好:

^{pr2}$

另外,不要在您的__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__函数中,你通过说n = len(self.termos)来实例化一个Polinomio,但是你使用了一个叫做关键字参数的东西,所以它实际上不会将一个n实例化为len(self.termos,你应该改为说Polinomio([], len(self.termos),或者实现关键字参数,如果你想用这个语法来表示它。

相关问题 更多 >