2017-08-31 22 views
-1

我學習Python類,我創建了一個類叫做多項式,並正嘗試添加兩個多項式,但總是會收到以下錯誤消息類多項式

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 
+0

可能重複[Python:Object不支持索引](https://stackoverflow.com/questions/22463866/python-object-does-not-support-indexing) –

回答

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 

此外,不要在你的__init__簽名初始化termos列表,它會永遠指向同一個列表。相反,它聲明爲None,並打造爲新的,只要它不通過,即:

def __init__ (self, termos = None, n = 0): 
    self.termos = termos or [] 
    self.n = [0] * n 
1

你應該添加一個方法__getitem__

def __getitem__(self, i): 
    return self.termos[i] 

而且也在你__add__功能,您實例化一個Polinomio通過說n = len(self.termos),但你使用的東西叫做關鍵字參數,所以它不會實例化一個Polinomion作爲len(self.termos,而應該說Polinomio([], len(self.termos)或實現關鍵字參數如果你想用這種語法來證明它。