Tenho algumas duvidas em relação a sintaxe de uma subclasse com multiplas heranças:
Posso adicionar quantas superclasse em uma subclasse?
A função super() mantem o mesmo formato ou é necessário conter um super() pra cada SuperClasse?
Tenho algumas duvidas em relação a sintaxe de uma subclasse com multiplas heranças:
Posso adicionar quantas superclasse em uma subclasse?
A função super() mantem o mesmo formato ou é necessário conter um super() pra cada SuperClasse?
Olá Vinicius, tudo bem com você?
Peço desculpas pela demora no retorno.
Quando temos uma classe com múltiplas heranças e as classes mães possuem o método inicializador, temos que adicionar o super no método inicializador das classes mães e no método inicializador da classe filha.
Considerando uma classe de nome FooBar que herda da classe Foo e da classe Bar, representadas a seguir.
class Foo:
def __init__(self):
print("Usando o método inicializador da Classe Foo")
super().__init__()
class Bar:
def __init__(self):
print("Usando o método inicializador da Classe Bar")
super().__init__()
class FooBar(Foo, Bar):
def __init__(self):
print("Usando o método inicializador da Classe FooBar")
super().__init__()
FooBar()
Resultado
Usando o método inicializador da Classe FooBar
Usando o método inicializador da Classe Foo
Usando o método inicializador da Classe Bar
Note que no código acima, o método inicializador da classe filha é instanciado, logo após a inicialização dos métodos das classes mães como apresentado nas mensagens impressas.
Sobre a quantidade limite de múltiplas heranças, a documentação do Python não apresenta um valor limite para heranças, mas devemos ter em mente que quanto maior a herança de classes mais complexo poderá ficar nosso código, assim podemos perder parte do controle sobre os métodos que são herdados pelas classes.
Deixo duas recomendações de leitura: o primeiro artigo, será apresentado sobre as boas práticas do uso de múltiplas heranças.
O segundo artigo irá apresentar com detalhes sobre o funcionamento da herança múltipla no Python e como é o funcionamento por baixo dos panos dos métodos inicializadores. O próximo artigo está em inglês, caso tenha dificuldades com o idioma, recomendo o uso do tradutor do navegador;
Fico à disposição em caso de dúvidas.
Abraços e bons estudos.