IIC2233 / Syllabus-2024-1

79 stars 11 forks source link

Duda sobre Multiherencia #183

Open sofiiit opened 5 months ago

sofiiit commented 5 months ago

Prerrequisitos

(Marcar colocando una X entre los corchetes los ítems que ya hiciste, así: "[X]")

Duda

En los apuntes de la semana 4, 3-multiherencia hay un ejemplo que dice

class ClaseB:

    num_llamadas_B = 0

    def llamar(self):
        print("Llamando método en Clase B")
        self.num_llamadas_B += 1

class SubClaseIzquierda(ClaseB):

    num_llamadas_izq = 0

    def llamar(self):
        print("Estoy en Subclase Izquierda")
        super().llamar()
        print("Llamando método en Subclase Izquierda")
        self.num_llamadas_izq += 1

class SubClaseDerecha(ClaseB):

    num_llamadas_der = 0

    def llamar(self):
        print("Estoy en Subclase Derecha")
        super().llamar()
        print("Llamando método en Subclase Derecha")
        self.num_llamadas_der += 1

class SubClaseA(SubClaseIzquierda, SubClaseDerecha):

    num_llamadas_subA = 0

    def llamar(self):
        print("Estoy en Subclase A")
        super().llamar()
        print("Llamando método en Subclase A")
        self.num_llamadas_subA += 1

s = SubClaseA()
s.llamar()
print()
print(f"Llamadas en Subclase A: {s.num_llamadas_subA}")
print(f"Llamadas en Subclase Izquierda: {s.num_llamadas_izq}")
print(f"Llamadas en Subclase Derecha: {s.num_llamadas_der}")
print(f"Llamadas en Clase B: {s.num_llamadas_B}")

y la salida de este código es

Estoy en Subclase A
Estoy en Subclase Izquierda
Estoy en Subclase Derecha
Llamando método en Clase B
Llamando método en Subclase Derecha
Llamando método en Subclase Izquierda
Llamando método en Subclase A

Llamadas en Subclase A: 1
Llamadas en Subclase Izquierda: 1
Llamadas en Subclase Derecha: 1
Llamadas en Clase B: 1

Comprendo las salidas hasta "Llamando método en Clase B" pero no entiendo por qué, después de eso imprime "Llamando método en Subclase Derecha" y luego "Llamando método en Subclase Izquierda" por qué como que se invirtió?

JJJGGGG commented 5 months ago

Hola @sofiiit , sé que ya pasó el midterm, pero igual te lo responderé:

Pasan estas cosas:

Como ves, o que esta antes de la llamada del metodo se imprime en el orden normal y lo que esta despues se llama en orden inverso.

Espero haberte aclarado!