Métodos e Atributos Herdados
A herança é um dos pilares fundamentais da Programação Orientada a Objetos (POO). Permite que uma classe (subclasse) herde atributos e métodos de outra classe (superclasse). Esta funcionalidade promove a reutilização de código e a hierarquia de classes, tornando a programação mais eficiente e organizada.
Conceitos Básicos de Herança
Em Python, a herança é implementada através da definição de uma nova classe que recebe como parâmetro a classe que deseja herdar. Vamos examinar um exemplo simples para compreender melhor este conceito:
class Animal:
def __init__(self, nome):
self.nome = nome
def fazer_som(self):
pass
class Cao(Animal):
def fazer_som(self):
return "Ladrar"
class Gato(Animal):
def fazer_som(self):
return "Miar"
# Criação de objetos
cao = Cao("Rex")
gato = Gato("Mimi")
print(cao.nome) # Output: Rex
print(cao.fazer_som()) # Output: Ladrar
print(gato.nome) # Output: Mimi
print(gato.fazer_som()) # Output: Miar
Neste exemplo, Cao
e Gato
são subclasses que herdam a classe Animal
. Ambas possuem o método fazer_som
, que é sobrescrito em cada subclasse para retornar o som que cada animal faz.
Atributos Herdados
Os atributos definidos na superclasse são automaticamente herdados pelas subclasses. Isto significa que, ao criar instâncias das subclasses, os atributos da superclasse estarão disponíveis.
Exemplo
Considere uma classe Veiculo
com um atributo marca
:
class Veiculo:
def __init__(self, marca):
self.marca = marca
class Carro(Veiculo):
def __init__(self, marca, modelo):
super().__init__(marca)
self.modelo = modelo
class Moto(Veiculo):
def __init__(self, marca, cilindrada):
super().__init__(marca)
self.cilindrada = cilindrada
# Criação de objetos
carro = Carro("Toyota", "Corolla")
moto = Moto("Honda", "150cc")
print(carro.marca) # Output: Toyota
print(carro.modelo) # Output: Corolla
print(moto.marca) # Output: Honda
print(moto.cilindrada) # Output: 150cc
Neste exemplo, Carro
e Moto
herdam o atributo marca
da classe Veiculo
e definem os seus próprios atributos modelo
e cilindrada
, respetivamente.
Métodos Herdados
Os métodos definidos na superclasse também são herdados pelas subclasses, podendo ser utilizados diretamente ou sobrescritos para fornecer uma implementação específica.
Exemplo
Vamos adicionar um método descricao
à classe Veiculo
e ver como ele pode ser utilizado pelas subclasses:
class Veiculo:
def __init__(self, marca):
self.marca = marca
def descricao(self):
return f"Veículo da marca {self.marca}"
class Carro(Veiculo):
def __init__(self, marca, modelo):
super().__init__(marca)
self.modelo = modelo
def descricao(self):
return f"Carro {self.modelo} da marca {self.marca}"
class Moto(Veiculo):
def __init__(self, marca, cilindrada):
super().__init__(marca)
self.cilindrada = cilindrada
def descricao(self):
return f"Moto {self.cilindrada} da marca {self.marca}"
# Criação de objetos e chamada aos métodos
carro = Carro("Toyota", "Corolla")
moto = Moto("Honda", "150cc")
print(carro.descricao()) # Output: Carro Corolla da marca Toyota
print(moto.descricao()) # Output: Moto 150cc da marca Honda
Aqui, o método descricao
na superclasse Veiculo
é sobrescrito nas subclasses Carro
e Moto
para fornecer uma descrição mais específica.
Resumo
Neste capítulo, aprendemos sobre a herança em Python, como os atributos e métodos são herdados, e como podemos sobrescrever métodos para fornecer implementações específicas nas subclasses. Esta capacidade de reutilizar código torna os nossos programas mais eficientes e organizados.
Quiz
-
O que permite a herança na Programação Orientada a Objetos?
- a) Atribuição de novos atributos às classes
- b) Criação de hierarquias de classes e reutilização de código
- c) Encapsulamento de dados
-
Qual das seguintes opções é verdadeira sobre atributos herdados?
- a) Apenas as subclasses podem ter atributos
- b) Os atributos da superclasse são automaticamente disponíveis nas subclasses
- c) Os atributos da superclasse precisam ser redefinidos nas subclasses
-
O que acontece quando um método definido na superclasse é sobrescrito numa subclasse?
- a) O método da superclasse é excluído
- b) A subclasse pode fornecer uma implementação específica para o método
- c) O método não pode ser usado
Respostas:
- b) Criação de hierarquias de classes e reutilização de código
- b) Os atributos da superclasse são automaticamente disponíveis nas subclasses
- b) A subclasse pode fornecer uma implementação específica para o método