2011-11-28 16 views
6

Al momento ho una classe chiamata polinomio, L'inizializzazione aspetto:sottoclassi pitone

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

Sto creando un polinomio, rendendo le chiavi gli esponenti ei i valori associati sono i coefficienti. Per creare un'istanza di questa classe, si entra nel modo seguente:

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

che fa un dizionario in questo modo:

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

Ora, voglio creare una sottoclasse della classe polinomiale quadratica chiamata. Voglio chiamare il costruttore della classe Polynomial nel costruttore della classe Quadratic, tuttavia non sono abbastanza sicuro di come farlo. Quello che ho provato è:

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

ma ho errori, qualcuno ha qualche consiglio? Mi sembra di utilizzare parametri errati quando chiamo il costruttore della classe Polynomial.

risposta

10

probabilmente avrete bisogno

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

Grazie a questa soluzione, ho inserito i numeri nel posto sbagliato. – me45

15

Si dovrebbe anche usare super() invece di utilizzare direttamente il costruttore.

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

Puoi spiegare perché è meglio? – kelorek

+1

Capito. Vedi questo post per maggiori informazioni: http://stackoverflow.com/questions/576169/understanding-python-super-and-init-methods – kelorek