1
resposta

[Projeto] [ Hora da prática] instância de uma classe

Segue como apliquei:

veiculo.py

#CLASSE PAI
class Veiculos:
    def __init__(self,marca,modelo,ativo=False):
        self._marca = marca
        self._modelo = modelo
        self._ativo = ativo
    def __str__(self):
        tipo_ativo = 'Ativo' if self._ativo else 'Inativo' # Muda True or False para Ativo e Inativo
        return f'Marca: {self._marca.ljust(10)} | Modelo: {self._modelo.ljust(10)} | Status: {tipo_ativo.ljust(10)}'

carro.py

from veiculos import Veiculos

class Carro(Veiculos):
    def __init__(self, marca, modelo, portas, ativo=False):
        super().__init__(marca, modelo, ativo)
        self._portas = portas
    def __str__(self):
        return super().__str__() + f' | Portas: {self._portas}'

moto.py

from veiculos import Veiculos

class Moto(Veiculos):
    def __init__(self,marca,modelo,esportivo=False,ativo=False):
        super().__init__(marca,modelo,ativo)
        self._esportivo = esportivo
    def __str__(self):
        tipo_moto = "Esportiva" if self._esportivo else "Casual" #define se o carro é esportivo ou casual.
        return super().__str__() + f' | Tipo: {tipo_moto}' 

main.py

from carro import Carro
from moto import Moto

#exemplos
carro1 = Carro('Jeep', 'Renegade', 4)
carro2 = Carro('Volkswagen', 'Golf', 5)
carro3 = Carro('BMW', 'X5', 4, True)
moto1 = Moto('Yamaha', 'MT-07', True)
moto2 = Moto('Honda', 'CB500', False)
moto3 = Moto('Kawasaki', 'Ninja 400', True)

#lista pra ser usada pro "for"
veiculos = [carro1, carro2, carro3, moto1, moto2, moto3]

#print da lista
for veiculo in veiculos:
    print(veiculo)

resultado final:

Imagejm com o resultado do print do código

1 resposta

Olá, Renata. Tudo bem?

Obrigado por compartilhar seu código com a gente.

Ótimo como você organizou a herança entre as classes Carro e Moto, mantendo o método __str__ reutilizável. O uso de _marca, _modelo e _ativo encapsulados melhora a estrutura da classe base.

Uma dica interessante é utilizar propriedades (@property) para acessar atributos de forma controlada. Isso permite manter a proteção dos atributos e ainda oferecer um jeito seguro de acessá-los. Veja este exemplo aplicado ao atributo _ativo:


class Veiculos:
    def __init__(self, marca, modelo, ativo=False):
        self._marca = marca
        self._modelo = modelo
        self._ativo = ativo

    @property
    def ativo(self):
        return "Ativo" if self._ativo else "Inativo"

Com isso, ao invés de acessar _ativo diretamente, você pode usar veiculo.ativo e obter a versão formatada automaticamente.

Conte com o apoio do Fórum. Bons estudos.