Explique o que é herança em POO e como ela é implementada em Python. Dè um exemplo de uma classe Animal e uma classe Cachorro que herda de Animal, incluindo um método emitir_som() em ambas.
Passo 1
O enunciado pede para entendermos o conceito de herança em POO (Programação Orientada a Objetos) e vermos como implementá-la em Python. Vamos precisar explicar o que é herança, por que ela é útil e depois mostrar um exemplo concreto com uma classe base
Animal e uma subclasse Cachorro que herda de Animal, ambas com um método emitir_som().Passo 2
Herança em POO é um mecanismo que permite a uma classe (a subclasse) reutilizar atributos e métodos de outra classe (a superclasse ou classe base). Isso traz dois grandes benefícios:
- Reuso de código: a subclasse herda tudo que a superclasse já define, evitando duplicação.
- Especialização: a subclasse pode adicionar ou redefinir (sobrescrever) métodos e atributos para comportamentos específicos.
Passo 3
Em Python, a herança é implementada declarando a classe filha entre parênteses após o nome da classe. Por exemplo:
class Animal:
# corpo da classe base
...
class Cachorro(Animal):
# corpo da subclasse
...
Dentro da subclasse, você pode chamar o construtor da superclasse com
super().__init__(...) se precisar herdar e inicializar atributos definidos em Animal.Passo 4
Vamos definir ambas as classes com um método
emitir_som(). Na superclasse Animal, esse método pode ser genérico ou até lançar uma exceção indicando que deve ser sobrescrito. Na subclasse Cachorro, vamos sobrescrever para imprimir “Au au!”.Resposta
class Animal:
def __init__(self, nome):
# atributo comum a todos os animais
self.nome = nome
def \(emitir_som\)(self):
# método genérico, que pode ser sobrescrito
print(f"{self.nome} está em silêncio ou faz um som genérico.")
class Cachorro(Animal):
def __init__(self, nome, raca):
# chama o __init__ de Animal para inicializar o nome
super().__init__(nome)
# atributo específico de cachorro
self.raca = raca
def \(emitir_som\)(self):
# sobrescrita do método da superclasse
print(f"{self.nome} diz: Au au!")
# Exemplo de uso
if __name__ \(==\) "__main__":
# instanciando um Animal genérico
a = Animal("Bicho")
a.\(emitir_som\)() # saída: Bicho está em silêncio ou faz um som genérico.
# instanciando um Cachorro
c = Cachorro("Rex", "Labrador")
c.\(emitir_som\)() # saída: Rex diz: Au au!
Explicação rápida do código:
Animaldefine o atributonomee um métodoemitir_som()básico.Cachorro(Animal)declara queCachorroherda deAnimal.- No construtor de
Cachorro, usamossuper().__init__(nome)para reutilizar a inicialização deAnimal. - Em
Cachorro.emitir_som(), sobrescrevemos o comportamento para algo específico de cães.