Herança

A herança é um dos princípios fundamentais da programação orientada a objetos, permitindo que você crie novas classes baseadas em classes existentes. Em Python, a herança é uma técnica poderosa que facilita a reutilização de código e a criação de hierarquias de classes. Neste tutorial, vamos explorar a herança em Python, incluindo como criar classes derivadas, sobrescrever métodos, acessar métodos da classe pai e entender a hierarquia de classes.

1. Criando uma Classe Base:

Vamos começar criando uma classe base que será usada como ponto de partida para nossas classes derivadas.

class Animal:
    def __init__(self, nome):
        self.nome = nome

    def fazer_som(self):
        pass

A classe Animal possui um construtor que define o nome do animal e um método fazer_som que será sobrescrito pelas classes derivadas.

2. Criando Classes Derivadas:

Agora, vamos criar classes derivadas que herdam da classe base Animal.

class Cachorro(Animal):
    def fazer_som(self):
        return "Woof!"

class Gato(Animal):
    def fazer_som(self):
        return "Meow!"

As classes Cachorro e Gato são subclasses da classe Animal e herdam seus atributos e métodos.

3. Sobrescrevendo Métodos:

Quando uma classe derivada tem um método com o mesmo nome que o método da classe base, o método da classe derivada sobrescreve o método da classe base.

cachorro = Cachorro("Buddy")
print(cachorro.fazer_som())  # Saída: Woof!

gato = Gato("Whiskers")
print(gato.fazer_som())  # Saída: Meow!

4. Acessando Métodos da Classe Pai:

Você pode acessar os métodos da classe pai usando a função super().

class AnimalComPeso(Animal):
    def __init__(self, nome, peso):
        super().__init__(nome)
        self.peso = peso

    def exibir_info(self):
        print(f"{self.nome} pesa {self.peso} kg.")

gato_pesado = AnimalComPeso("Whiskers", 5)
gato_pesado.exibir_info()  # Saída: Whiskers pesa 5 kg.

No exemplo acima, super().__init__(nome) chama o construtor da classe pai para inicializar o atributo nome.

5. Hierarquia de Classes:

Você pode criar hierarquias de classes com várias camadas de herança.

class Mamifero(Animal):
    def __init__(self, nome, tipo_pelo):
        super().__init__(nome)
        self.tipo_pelo = tipo_pelo

class CachorroMamifero(Cachorro, Mamifero):
    def __init__(self, nome, tipo_pelo):
        Cachorro.__init__(self, nome)
        Mamifero.__init__(self, nome, tipo_pelo)

Na classe CachorroMamifero, a ordem das classes base na lista de herança (Cachorro, Mamifero) determina a ordem em que os construtores das classes base são chamados.

A herança em Python é uma técnica poderosa para criar hierarquias de classes, promovendo a reutilização de código e a criação de classes especializadas a partir de classes existentes. Ao entender como criar classes derivadas, sobrescrever métodos, acessar métodos da classe pai e gerenciar hierarquias de classes, você terá um conhecimento sólido sobre herança em Python.