1
resposta

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

app.py
from abc import ABC, abstractmethod

#2.No mesmo arquivo, crie um construtor para a classe Veiculo que aceita os parâmetros marca e modelo.

class Veiculo(ABC):
    def __init__(self,marca,modelo):
        self.marca = marca
        self.modelo = modelo

#1.Crie uma classe chamada Veiculo com um método abstrato chamado ligar.
    @abstractmethod
    def ligar(self):
        pass
    

#3.Crie uma nova classe chamada Carro que herda da classe Veiculo.

class Carro(Veiculo):
    def __init__(self,marca,modelo,cor):

#4.No construtor da classe Carro, utilize o método super() para chamar o construtor da classe pai e atribua o atributo específico cor à classe filha.
        super().__init__(marca,modelo)
        self.cor = cor
        
    def ligar(self):
        print(f'O modelo {self.modelo} está ligado')
main.py
from app import Carro
#5.Em um arquivo chamado main.py, importe a classe Carro.

#6.No arquivo main.py, instancie três objetos da classe Carro com diferentes características, como marca, modelo e cor.

carro1 = Carro('Volkswagen', 'Fusca', 'Azul')
carro2 = Carro('Chevrolet', 'Monza', 'Prata')
carro3 = Carro('Chevrolet', 'Chevette', 'Branco')

def main():
    carro1.ligar()
    carro2.ligar()
    carro3.ligar()

if __name__ == '__main__':
    main()

![Print do terminal do VS Code mostrando a execução com sucesso do script main.py.

O resultado comprova o funcionamento correto da lógica de Programação Orientada a Objetos:

Execução do Script: O comando roda o arquivo main.py dentro do ambiente de desenvolvimento.

Saída de Dados (Output): O terminal exibe as três linhas de texto geradas pelo método ligar() de cada instância de Carro, renderizando dinamicamente as propriedades passadas no construtor:

O modelo Fusca está ligado

O modelo Monza está ligado

O modelo Chevette está ligado](https://cdn1.gnarususercontent.com.br/1/7332130/182f952f-8ed8-4a47-b48d-ed4942b09d9b.png)

1 resposta

Oi, Carlos! Como vai?

Gostei da forma como você organizou a separação entre os arquivos app.py e main.py, isso deixa o projeto mais limpo e facilita a manutenção. Também foi muito bom utilizar ABC e @abstractmethod, pois mostra que você entendeu bem o conceito de classes abstratas e polimorfismo na prática.

Uma dica interessante para o futuro é criar um método especial como __str__ para exibir informações do objeto de forma mais amigável. Veja este exemplo:


class Carro:
    def __init__(self, marca, modelo):
        self.marca = marca
        self.modelo = modelo

    def __str__(self):
        return f'{self.marca} - {self.modelo}'

carro = Carro('Ford', 'Ka')
print(carro)

Esse código permite mostrar os dados do objeto de maneira mais organizada ao usar o print().

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