类多项式

时间:2017-08-31 15:28:00

标签: python python-3.x class object

我正在用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

2 个答案:

答案 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) Polinomion,如果您想使用该语法来实例化它,则应该说len(self.termos或实现关键字参数。