1
resposta

Minha solução

veiculo.py

from abc import ABC, abstractmethod

class Veiculo(ABC):
    def __init__(self, marca, modelo):
        self._marca = marca
        self._modelo = modelo
        self._ligado = False
    
    @abstractmethod
    def ligar(self):
        if not self._ligado:
            self._ligado = True
            print("O veículo foi ligado")
        else:
            print("O veículo já está ligado.")
    
    @abstractmethod
    def desligar(self):
        if self._ligado:
            self._ligado = False
            print("O veículo foi desligado")
        else:
            print("O veículo já está desligado.")
    
    def __str__(self):
        return f"Marca: {self._marca}\nModelo: {self._modelo}\nEstado: {'ligado' if self._ligado else 'desligado'}"

carro.py

from veiculo import Veiculo

class Carro(Veiculo):
    def __init__(self, marca, modelo, cor):
        super().__init__(marca, modelo)
        self._cor = cor
    
    def ligar(self):
        if not self._ligado:
            self._ligado = True
            print("O carro foi ligado.")
        else:
            print("O carro já está ligado.")
    
    def desligar(self):
        if self._ligado:
            self._ligado = False
            print("O carro foi desligado")
        else:
            print("O carro já está desligado.")
    
    def __str__(self):
        return f"{super().__str__()}\nCor: {self._cor}"

main.py

from carro import Carro

carro1 = Carro("Honda", "Fit", "Prata")
print("Antes de ligar:")
print(carro1)
print("\nDepois de ligar: ")
carro1.ligar()
print(carro1)
print("\nTentando ligar novamente: ")
carro1.ligar()
carro2 = Carro("Fiat", "Uno", "Branco")
print("\nCarro 2:")
print(carro2)
carro3 = Carro("Toyota", "Corola", "Cinza")
print("\nCarro 3:")
print(carro3)
print("\nTentando desligar carro desligado: ")
carro3.desligar()
1 resposta

Oi, Gabriel! Como vai?

Agradeço por compartilhar seu código com a comunidade Alura.

Você estruturou muito bem a hierarquia entre Veiculo e Carro, aplicando herança, sobrescrita de métodos e o método especial __str__ de forma organizada. Ficou claro o uso do polimorfismo ao redefinir ligar() e desligar() na classe filha, além de manter o encapsulamento com atributos protegidos como _ligado.

Continue assim!

Qualquer dúvida que surgir, compartilhe no fórum. Abraços e bons estudos!

Alura

Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!