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
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.
deixe-me dizer algumas palavras