Alguém pode me explicar o que está acontecendo aqui? Chama D, B, C, A. Você pode fornecer como isso acontece

Pramod Choudhary

Sou novo no conceito de super. Não consigo entender a pilha de chamadas feita pelo método m de cada classe neste código

class A:
    def m(self):
        print("m of A called")
        print("OUT OF A")

class B(A):
    def m(self):
        print("m of B called")
        super().m()
        print("OUT OF B")

class C(A):
    def m(self):
        print("m of C called")
        super().m()
        print("OUT OF C")

class D(B,C):
    def m(self):
        print("m of D called")
        super().m()
        print("OUT OF D")

x = D()
x.m()

A saída do seguinte é:

m of D called
m of B called
m of C called
m of A called
OUT OF A
OUT OF C
OUT OF B
OUT OF D

Como é super de D chamando B. () e C. () que chama Am () apenas uma vez

LhasaDad

A explicação pode ser encontrada aqui: https://docs.python.org/3.6/library/functions.html#super

Basicamente, você obtém a superclasse ou irmão (com herança múltipla)

do link:

O segundo caso de uso é oferecer suporte à herança múltipla cooperativa em um ambiente de execução dinâmico. Este caso de uso é exclusivo para Python e não é encontrado em linguagens compiladas estaticamente ou linguagens que suportam apenas herança única. Isso torna possível implementar “diagramas de diamante” onde várias classes de base implementam o mesmo método. Um bom design determina que este método tenha a mesma assinatura de chamada em todos os casos (porque a ordem das chamadas é determinada no tempo de execução, porque essa ordem se adapta às mudanças na hierarquia de classes e porque essa ordem pode incluir classes irmãs que são desconhecidas antes do tempo de execução )

Este artigo é coletado da Internet.

Se houver alguma infração, entre em [email protected] Delete.

editar em
0

deixe-me dizer algumas palavras

0comentários
loginDepois de participar da revisão

Artigos relacionados