Esta semana vou falar sobre mais um tópico relativo a orientação a objetos: herança.
Herança consiste em fazer com que uma classe "herde" os atributos e métodos de uma outra classe, podendo reescrevê-los ou adicionar funcionalidade à estes.
Vamos a um exemplo prático, a partir da classe que especificamos anteriormente:
# coding: utf-8 # mamifero.py class Mamifero: def som(self): print 'emitir um som' class Homem(Mamifero): def som(self): print 'Oi!' class Cachorro(Mamifero): def som(self): print 'Wufff! Wufff!' class Gato(Mamifero): def som(self): print 'Meawwwww!' mamifero = Mamifero() mamifero.som() animais = [Homem(), Cachorro(), Gato()] for animal in animais: animal.som()
No código acima, criamos 3 classes onde estas herdam os atributos da classe "Mamifero". Neste caso estou demonstrando como podemos reescrever os métodos de uma classe para alterar o funcionamento deste numa classe mais específica.
Ao executar o código acima, no "for" mais abaixo no código, percorreremos uma lista de animais, chamando o método "som()" para cada um deles. Como cada animal foi criado a partir de uma classe específica, o método desta classe mais específica é chamado, e não o da classe mais genérica, "Mamifero". Sendo assim, o som emitido será o que nós esperamos.
Estou indo devagar nesta introdução à classes por este ser um tópico que causa muita confusão nos programadores iniciantes, mas que após um certo tempo de prática se mostra um paradigma interessante e fácil de lidar no dia a dia, tornando a abstração de problemas reais em algoritmos mais simples.