繁体   English   中英

类多项式

[英]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__功能,您实例化一个Polinomion = len(self.termos)但是你用一种叫做关键字参数,所以它实际上不会实例化一个Polinomionlen(self.termos ,则应该说Polinomio([], len(self.termos)或实现关键字参数,如果您想使用该语法来实例化它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM