蟒子

2011-11-28 61 views
6

我現在有一個叫做多項式類,初始化看起來是這樣的:蟒子

def __init__(self, *termpairs): 
    self.termdict = dict(termpairs) 

我通過使鍵指數和 相關值係數建立一個多項式。爲了創建這個類的一個實例,你輸入如下:

d1 = Polynomial((5,1), (3,-4), (2,10)) 

這使得字典就像這樣:

{2: 10, 3: -4, 5: 1} 

現在,我想創建一個名爲二次多項式類的子類。我想調用Quadratic類構造函數中的Polynomial類構造函數,但是我不太清楚如何去做。我試過的是:

class Quadratic(Polynomial): 
def __init__(self, quadratic, linear, constant): 
    Polynomial.__init__(self, quadratic[2], linear[1], constant[0]) 

但我得到的錯誤,任何人有任何提示?當我調用Polynomial類構造函數時,我感覺我正在使用不正確的參數。

回答

10

你可能想

class Quadratic(Polynomial): 
    def __init__(self, quadratic, linear, constant): 
     Polynomial.__init__(self, (2, quadratic), (1, linear), (0, constant)) 
+0

感謝這工作,我只是把數字放在錯誤的地方。 – me45

15

您還應該使用super()而不是直接使用構造函數。

class Quadratic(Polynomial): 
    def __init__(self, quadratic, linear, constant): 
     super(Quadratic, self).__init__(quadratic[2], linear[1], constant[0]) 
+0

你能詳細說明爲什麼這樣更好嗎? – kelorek

+1

明白了。有關更多信息,請參閱此文章:http://stackoverflow.com/questions/576169/understanding-python-super-and-init-methods – kelorek