es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Herencia múltiple en clases con funciones que tienen el mismo nombre

Si tienes una clase que utiliza la herencia múltiple utilizando dos clases con el mismo nombre para una función, ¿qué función tiene prioridad? Según lo que he encontrado, la función que se declara primero en la declaración de la clase tiene prioridad. ¿Hay alguna forma mejor de llamar a una función de la clase que está en segundo lugar que lo que tengo ahora?

class test():
    number = 10
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z
        self.something = z
    def printnumber(self):
        print(self.number)

class trial():
    def __init__(self,a,b,c):
        self.a = a
        self.b = b
        self.c = c
    def printnumber(self):
        print(self.c)

class check(test, trial):
    def __init__(self, a, b, c,x,y,z):
        trial.__init__(self ,a, b, c)
        test.__init__(self, x,y,z)
    def printnumber(self):
        return trial.printnumber(self)

Además, por curiosidad, ¿hay otras ocasiones en la herencia múltiple o en las clases en general en las que el orden en el que se listan las clases en el encabezado de la clase importa?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, cuando se utiliza la herencia múltiple, el orden de las clases padre en la declaración de la clase importa. Si dos clases tienen el mismo nombre de método, el método de la primera clase listada tendrá prioridad sobre la segunda.

    Una forma de llamar a una función de la segunda clase es usar explícitamente el nombre de la clase seguido del nombre del método, es decir, trial.printnumber(self) como se muestra en el ejemplo anterior.

    En general, el orden de las clases padre también importa cuando se trata del orden de resolución de los métodos (MRO, por sus siglas en inglés) en Python. El MRO es el orden en el que Python busca un método en una jerarquía de clases. El MRO se determina utilizando el algoritmo de linearización C3 y depende del orden en el que se enumeran las clases padre. Por lo tanto, cambiar el orden de las clases padre puede tener un impacto en el MRO y en el comportamiento del programa.

Comments are closed.