Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Duvida sobre erança de classes

Surgiu uma dúvida enquanto assistia o curso de OO em Python relativo à herança de classes em python.

Já vi várias explicações de classe e herança, que normalmente envolvem animais e veículos, mas uma coisa nunca ficou muito claro para mim.

Vamos usar o exemplo de veículos. Se eu tiver uma classe Veiculos, essa pode ser minha classe mãe, da qual as outras classes Carro, Moto, barco, fazem parte e são filhos.

Contudo, se eu inverter um pouco a linha de raciocínio:

Vamos pensar que eu tenho uma classe Carro, essa classe tem vários atributos e métodos. Contudo, ela pode ser composta de outras "subclasses", pois cada componente do carro pode ser uma classe a parte, como, por exemplo, as rodas.

Cada roda de um carro pode ser uma instância de classe a parte com seus atributos e métodos (pressão diâmetro, material, etc).

Seguindo essa linha de raciocínio, não faz sentido dizer que a classe Carro é filha dessas outras várias classes (Roda, Motor, Banco, etc)???

Sendo assim, uma vez que eu crie a classe carro e coloque essas outras classes como classes mães, ela não teria que ter os atributos de inicialização das classes mãe na classe filho???

2 respostas
solução!

Olá Álvaro,

Essa relação que você mencionou já não e mais o que a herança representa (situação é um), isso agora é uma relação de composição (como você até já descobriu indiretamente na frase "Contudo, ela pode ser composta de outras "subclasses"").

A composição representa a relação tem um (ao contrário do é um da herança), e é exatamente isso que temos nesse exemplo, a classe Carro tem um Motor. Então quando criamos um objeto Carro vamos ter dentro dele um objeto Motor, do mesmo jeito que podemos ter um valor numérico ou em texto (str).

Para ajudar segue um código com o exemplo mencionado:]

class Motor:
  def __init__(self, potencia):
    self.potencia = potencia

  def liga(self):
    print("Ligando o motor")

#===========================

class Pneu:
  def __init__(self, marca):
    self.marca = marca

#===========================

class Carro:
  def __init__(self, motor, pneus):
    self.motor = motor
    self.pneus = pneus

  def liga(self):
    print("Ligando o carro")
    self.motor.liga()


#===========================

motor_v8 = Motor(250)
pneu1 = Pneu("Michelin")
pneu2 = Pneu("Michelin")
pneu3 = Pneu("Michelin")
pneu4 = Pneu("Firestone")

# Colocando o motor e os pneus no carro
corolla_v8 = Carro(motor_v8, [pneu1, pneu2, pneu3, pneu4])
corolla_v8.liga()

Espero ter ajudado, qualquer coisa é só falar!

Sensacional Lucas! Ficou bem claro pra mim com esse exemplo que vc mandou! Obrigado!