Herança múltipla em python


Herança é algo bem interessante, e Python, como uma linguagem completa que é também suporta herança nas classes.
Na verdade suporta até mais que isto: Herança Múltipla !

Para quem trabalha com Java isto não é familiar, pois o java não a suporta, porém para quem trabalha com C++ sim !
Vejamos o trecho de código a seguir:

class Azul():
    cor = 'azul'
    nivel = 1
    tom = 'marinho'
    def ehVermelho(self):
        return False
    
class Vermelho:
    cor = 'vermelho'
    nivel = 2
    
    def ehVermelho(self):
        return True
    
class Minha():
    def printcor(self):
        print self.cor
        print self.nivel
        print self.tom
        
class MinhaCor(Minha, Vermelho, Azul):
    def ehVermelho(self):
        return "Sempre!"
    
    
mc = MinhaCor()
mc.printcor()
print mc.ehVermelho()
print dir(mc)

Aqui temos 4 classess definidas: Azul, Vermelho, Minha e MinhaCor
Cada uma tem seus métodos e atributos definidos. O detalhe é que a classe MinhaCor é uma classe filha das outras 3 ao mesmo tempo ! Ou seja, ela herda todos os métodos e atributos das 3 classes.
Porém tem que ficar atento a ORDEM da herança, pois o python importa da esquerda para a direita.

Como no exemplo, temos alguns atributos repetidos, como a “cor”,”nivel” e “tom”, e quando executamos o

mc.printcor() imprime:
    vermelho
    2
    marinho

pois “cor” e “nivel” existem nas duas classes (Azul e Vermelho), porém Vermelho é herdado primeiro que azul, sendo assim os atributos “cor” e “nivel” do Azul não se sobrepoem aos já herdados, e o mesmo ocorre com o método “ehVermelho”. Ficando assim, somente o atributo “tom” do azul disponivel na classe MinhaCor. Claro, que atributos/metodos diferentes irão se mesclar na classe final.

E todo atributo e/ou método que for definido na classe final ( no nosso exemplo, a classe filha MinhaCor ), caso seja igual a algum item das classes pai estará sobrescrevendo o mesmo.

E devemos prestar atenção nestas situações de herança múltipla, pois dependendo do caso pode até deixar muito complexo o programa, fugindo da intenção da funcionalidade, que é ajudar e não complicar. Podemos por exemplo trocar uma herança múltipla por várias heranças em cadeia por exemplo, assim pelo menos organizando a bagunça!

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s