Desenvolvida originalmente sob o paradigma funcional, o Python precisou evoluir com o tempo para se adequar ao mercado competitivo e, assim, se tornar uma das linguagens mais utilizadas do mundo. Para isso, um dos principais recursos que foram implementados foi o suporte ao paradigma orientado ao objetos, porém, sem perder a essencia da linguagem, fazendo com que muita coisa seja implementada de forma diferente quando comparado com o Java ou o C#, por exemplo. Uma dessas mudanças foi a adição do recurso de herança na linguagem e que veremos como utilizá-la neste artigo.
O que é a Herança?
A Herança é um conceito do paradigma da orientação à objetos que determina que uma classe (filha) pode herdar atributos e métodos de uma outra classe (pai) e, assim, evitar que haja muita repetição de código.
Um exemplo do conceito de herança pode ser visto no diagrama a seguir:
Nele temos que as classes filhas Gato, Coelho e Cachorro herdam os atributos e métodos da classe pai Animal e, assim caracterizando a herança.
Não vamos entrar em muitos detalhes sobre o conceito da herança, mas se você quiser estudar um pouco mais a fundo esse conceito, recomendo um outro artigo aqui do blog: Devo usar herança ou composição?
Como usar a herança no Python?
Para utilizar a herança no Python é bem simples. Assim com vimos no diagrama acima, vamos criar quatro classes para representar as entidades Animal, Gato, Cachorro e Coelho.
Obs: não vamos nos preocupar com a implementação de métodos e atributos, vamos criar apenas o básico para demonstrar o conceito da herança.
class Animal():
def __init__(self, nome, cor):
self.__nome = nome
self.__cor = cor
def comer(self):
print(f"O {self.__nome} está comendo")
No código acima definimos a classe pai que irá possuir todos os atributos e métodos comuns às classes filhas (Gato, Cachorro e Coelho). Nela, criamos apenas o construtor que irá receber o nome e a cor do animal, além do método comer que vai exibir a mensagem com o nome do animal que está comendo.
Após isso, criamos as três classes “filhas” da classe Animal. Para definir que estas classes são herdeiras da classe Animal, declaramos o nome da classe pai nos parenteses logo após definir o nome da classe, como podemos ver abaixo:
import animal
class Gato(animal.Animal):
def __init__(self, nome, cor):
super().__init__(nome, cor)
import animal
class Cachorro(animal.Animal):
def __init__(self, nome, cor):
super().__init__(nome, cor)
import animal
class Coelho(animal.Animal):
def __init__(self, nome, cor):
super().__init__(nome, cor)
Note que as classes filhas só estão repassando seus dados de nome e cor para a classe Pai através do super()
e que nenhum método foi implementado dentro dessas classes.
Agora, por herdar da classe Animal, as classes Gato, Cachorro e Coelho podem, sem nenhuma alteração, utilizar o método comer()
, definido na classe Animal pois elas herdam dessa classe, logo elas possuem a permissão de invocar este método:
import gato, cachorro, coelho
gato = gato.Gato("Bichano", "Branco")
cachorro = cachorro.Cachorro("Totó", "Preto")
coelho = coelho.Coelho("Pernalonga", "Cinza")
gato.comer()
cachorro.comer()
coelho.comer()
Ao executar o código acima, obtemos o seguinte retorno no terminal:
O Bichano está comendo
O Totó está comendo
O Pernalonga está comendo
E é dessa forma que é implementado o conceito de herança no Python. Há muitos outros conceitos, dentro da herança, a serem abordados, como a sobrescrita de métodos, herança múltipla… Mas não se preocupem, estes tópicos serão abordados em breve. :)
Ah, claro, muito te recomendo o nosso completo curso sobre Orientacão a Objetos com Python:
Curso Python - Orientação a objetos
Conhecer o cursoEspero vocês lá. Abraço!