1
resposta

[Projeto] Hora da prática: métodos especiais e atributos

from abc import ABC,abstractmethod

class Veiculo(ABC):
    veiculos = []

    def __init__(self, marca, modelo):
        self._marca = marca
        self._modelo = modelo

        Veiculo.veiculos.append(self)

    @abstractmethod
    def ligar(self):
        pass

class Carro(Veiculo):
    def __init__(self, marca, modelo, cor):
        super().__init__(marca, modelo)
        self._cor = cor

    def ligar(self):
        print(f"{self._marca}, {self._modelo} está ligado")
from veiculo import Carro, Veiculo

fusca = Carro("VW", "Fusca", "Azul")
maveco = Carro("Ford", "Maverick", "Laranja")
opala = Carro("Chevrolet", "Opala", "Preto")


for i,item in enumerate(Veiculo.veiculos, start=1):
    print(f"{i}. {item._marca} {item._modelo} | {item._cor}")
1. VW Fusca | Azul
2. Ford Maverick | Laranja
3. Chevrolet Opala | Preto
1 resposta

Olá, Zé! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso de classes abstratas para estruturar o código com Python, utilizou muito bem a herança para especializar o comportamento dos veículos e ainda compreendeu a importância do atributo de classe para manter o registro de todos os objetos criados.

Uma dica interessante para o futuro é implementar o método especial __str__ para deixar a exibição dos objetos mais legível. Assim:

class Carro(Veiculo):
    def __init__(self, marca, modelo, cor):
        super().__init__(marca, modelo)
        self._cor = cor

    def ligar(self):
        print(f"{self._marca}, {self._modelo} está ligado")

    def __str__(self):
        return f"{self._marca} {self._modelo} | {self._cor}"

Isso faz com que, ao imprimir o objeto diretamente, ele já mostre as informações formatadas sem precisar acessar atributos manualmente.

Fico à disposição! E se precisar, conte sempre com o apoio do fórum.

Abraço e bons estudos!

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