1
resposta

[Projeto] Resolução das Heranças

Abaixo os arquivos com cada um dos exercícios

veiculo.py

#   E   X   E   R   C   Í   C   I   O   S
#1. Crie uma Classe Pai (Veiculo): Implemente uma classe chamada Veiculo com um construtor que aceita dois parâmetros, marca e modelo. A classe deve ter um atributo protegido _ligado inicializado como False por padrão.
#2. Construa o Método Especial str: Adicione um método especial str à classe Veiculo que retorna uma mensagem formatada com a marca, modelo e o estado de ligado/desligado do veículo.
class Veiculo:
    def __init__(self, marca, modelo):
        self.marca = marca
        self.modelo = modelo
        self._ligado = False

    def __str__(self):
        status = 'ligado' if self._ligado else 'desligado'
        return f'Marca: {self.marca} --- Modelo: {self.modelo} --- Status : {status}'

carro.py

#3. Crie uma Classe Filha (Carro): Agora, crie uma classe chamada Carro que herda da classe Veiculo. No construtor da classe Carro, inclua um novo atributo chamado portas que indica a quantidade de portas do carro.
#4. Implemente o Método Especial str na Classe Filha: Adicione um método especial str à classe Carro que estenda o método da classe pai (Veiculo) e inclua a informação sobre a quantidade de portas do carro.

from veiculo import Veiculo

class Carro(Veiculo):
    def __init__(self, marca, modelo, portas):
        super().__init__(marca, modelo)
        self.portas = portas
    
    def __str__(self):
        status = 'ligado' if self._ligado else 'desligado'
        return f'Marca: {str(self.marca).ljust(10)} --- Modelo: {str(self.modelo).ljust(10)} --- Portas: {str(self.portas).ljust(10)} --- Status : {status}'

moto.py

#5. Crie uma Classe Filha (Moto): Similarmente, crie uma classe chamada Moto que também herda de Veiculo. Adicione um novo atributo chamado tipo ao construtor, indicando se a moto é esportiva ou casual.
#6. Implemente o Método Especial str na Classe Filha (Moto): Adicione um método especial str à classe Moto que estenda o método da classe pai (Veiculo) e inclua a informação sobre o tipo da moto.

from veiculo import Veiculo

class Moto(Veiculo):
    def __init__(self, marca, modelo, tipo):
        super().__init__(marca, modelo)
        self.tipo = tipo
    
    def __str__(self):
        status = 'ligado' if self._ligado else 'desligado'
        return f'Marca: {str(self.marca).ljust(15)} --- Modelo: {str(self.modelo).ljust(50)} --- Tipo: {str(self.tipo).ljust(10)} --- Status: {status}'

main_ex0.py

#7. Crie um Arquivo Main (main.py): Crie um arquivo chamado main.py no mesmo diretório que suas classes.
#8. Importe e Instancie Objetos: No arquivo main.py, importe as classes Carro e Moto. Em seguida, crie três instâncias de Carro e Moto com diferentes marcas, modelos, quantidade de portas e tipos.
#9. Exiba as Informações: Para cada instância, imprima no console as informações utilizando o método str.

from carro import Carro
from moto import Moto

carro1 = Carro('Ford', 'Fiesta', 4)
carro2 = Carro('Chevrolet', 'Onix', 4)
carro3 = Carro('Wolkswagen', 'Fusca', 2)

moto1 = Moto('Yamaha', 'Não sei modelo x.x', 'Esportiva')
moto2 = Moto('Honda', 'Cotinuo não sabendo ^^', 'Casual')
moto3 = Moto('Harley-Davison', 'Se pedissem uma quarta moto, eu inventaria a marca', 'Esportiva')

print(carro1)
print(carro2)
print(carro3)
print()
print(moto1)
print(moto2)
print(moto3)

Apenas complementando que tomei liberdade em formatar as strings em .ljust() para melhorar a interface.

1 resposta

Olá Gabriel, tudo bem?

Gostei bastante da sua implementação das classes e da maneira como você utilizou herança e métodos especiais para personalizar a saída das informações. Isso demonstra um bom entendimento de conceitos avançados de orientação a objetos em Python.

Continue assim, você está no caminho certo para dominar Python orientado a objetos!

Abraços!