1
resposta

[Sugestão] tentei dessa forma

class Veiculo:

    def __init__(self, marca,modelo,protegido_ligado):
        self._marca=marca
        self._modelo=modelo
        self._protegido_ligado=False
    def __str__(self):
        return f'{self._marca} | {self._modelo} | {self._protegido_ligado}'
  
    @property
    def status(self):
        return 'Ligado' if self._protegido_ligado else 'Desligado'
        
        
        
from .veiculo import Veiculo

class Carro(Veiculo):
    carros=[]
    def __init__(self,marca,modelo,protegido_ligado,quantidade_portas):
        super().__init__(marca,modelo,protegido_ligado)
        self._quantidade_portas=quantidade_portas
        Carro.carros.append(self)
    def __str__(self):
        return f'{self._marca}{self._modelo}{self._protegido_ligado}{self._quantidade_portas}'
    @classmethod
    def listar_carro(cls):
      for carro in Carro.carros:
          print(f'Marca do carro: {carro._marca} | Modelo: {carro._modelo} | status: {carro.status} | número de portas: {carro._quantidade_portas}')
  
 
from .veiculo import Veiculo
class Moto(Veiculo):
  motos=[]
  def __init__(self,marca,modelo,protegido_ligado,tipo):
    super().__init__(marca,modelo,protegido_ligado)
    self.tipo=tipo
    Moto.motos.append(self)
  def __str__(self):
    return f'{self._marca}{self._modelo}{self._protegido_ligado}{self.tipo}'
  @classmethod
  def listar_motos(cls):
    for moto in Moto.motos:
      print(f'Marca da moto: {moto._marca} | Modelo: {moto._modelo} | status: {moto.status} | número de portas: {moto.tipo}')
  

from modelos.carro import Carro
from modelos.moto import Moto

carro1=Carro('Toyota','Corolla',False,4)
moto1=Moto('Honda','Biz 125',False,'Casual')

Carro.listar_carro()
Moto.listar_motos()
  
1 resposta

Olá, Andressa! Como vai?

Parabéns pela resolução da atividade!

Observei que você explorou o uso da herança para estruturar a classe Carro e Moto a partir de Veiculo, utilizou muito bem listas de classe para armazenar instâncias criadas e ainda compreendeu a importância de métodos de classe para listar os objetos de forma organizada.

Uma dica interessante para o futuro é ajustar alguns detalhes para deixar o código mais claro e consistente. Por exemplo, no construtor de Veiculo, o parâmetro protegido_ligado está sendo ignorado, já que você sempre define self._protegido_ligado = False. Se a ideia é permitir que o veículo seja criado já ligado ou desligado, pode ser feito assim:

class Veiculo:
    def __init__(self, marca, modelo, protegido_ligado=False):
        self._marca = marca
        self._modelo = modelo
        self._protegido_ligado = protegido_ligado

    def __str__(self):
        return f'{self._marca} | {self._modelo} | {self._protegido_ligado}'

    @property
    def status(self):
        return 'Ligado' if self._protegido_ligado else 'Desligado'

Além disso, na classe Moto, o texto exibido no método listar_motos menciona o número de portas, mas o atributo é tipo. Ajustando:

@classmethod
def listar_motos(cls):
    for moto in Moto.motos:
        print(f'Marca da moto: {moto._marca} | Modelo: {moto._modelo} | status: {moto.status} | tipo: {moto.tipo}')

Essas pequenas melhorias tornam o código mais legível e coerente com os atributos definidos.

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!