Sinceramente, já tenho um pouco de experiência com outras linguagens, e para aprender todos esses conceitos de orientação a objetos, linguagens como Java parece mais simples do que Python. Mas por enquanto está tranquilo de entender e vou deixar minha solução dessa lista, dividida em 4 arquivos:
veiculo.py
class Veiculo:
def __init__(self, marca, modelo):
self.marca = marca
self.modelo = modelo
self._ligado = False
def __str__(self):
estado = 'ligado' if self._ligado else 'desligado'
return f'{self.marca} {self.modelo} - Estado: {estado}'
carro.py
from veiculo import Veiculo
class Carro(Veiculo):
def __init__(self, marca, modelo, portas):
super().__init__(marca, modelo)
self.portas = portas
def __str__(self):
return f'{super().__str__()} | Portas: {self.portas}'
moto.py
from veiculo import Veiculo
class Moto(Veiculo):
def __init__(self, marca, modelo, tipo):
super().__init__(marca, modelo)
self.tipo = tipo
def __str__(self):
return f'{super().__str__()} | Tipo: {self.tipo}'
main.py
from carro import Carro
from moto import Moto
def main():
carro_1 = Carro(marca='Hyundai', modelo='HB20', portas=4)
carro_2 = Carro(marca='Chevrolet', modelo='Onix', portas=2)
carro_3 = Carro(marca='Toyota', modelo='Yaris', portas=4)
moto_1 = Moto(marca='Honda', modelo='CB 500', tipo='esportiva')
moto_2 = Moto(marca='Yamaha', modelo='Neo 125', tipo='casual')
moto_3 = Moto(marca='Honda', modelo='CRF 300F', tipo='casual')
print('--- Informações dos Veículos ---')
print(carro_1)
print(carro_2)
print(carro_3)
print(moto_1)
print(moto_2)
print(moto_3)
if __name__ == '__main__':
main()
Resultado: