2011-11-28 13 views
6

Actualmente tengo una clase llamada polinómica, La inicialización se ve así:subclases pitón

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

Estoy creando un polinomio haciendo que las llaves de los exponentes y los valores asociados son los coeficientes. Para crear una instancia de esta clase, se introduce de la siguiente manera:

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

que hace un diccionario de este modo:

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

Ahora, quiero crear una subclase de la clase de polinomios llamada cuadrática. Quiero llamar al constructor de clase Polynomial en el constructor de clase cuadrático, sin embargo, no estoy muy seguro de cómo hacerlo. Lo que he intentado es:

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

pero obtengo errores, ¿alguien tiene algún consejo? Siento que estoy usando parámetros incorrectos cuando llamo al constructor de la clase Polynomial.

Respuesta

10

es probable que desee

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

Gracias esto funcionó, acabo de poner los números en el lugar equivocado. – me45

15

También debe utilizar super() en lugar de utilizar directamente el constructor.

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

¿Puedes explicar por qué es mejor? – kelorek

+1

Lo tengo. Consulte esta publicación para obtener más información: http://stackoverflow.com/questions/576169/understanding-python-super-and-init-methods – kelorek