1
resposta

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

veiculos.py

from abc import ABC, abstractmethod

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

    @abstractmethod
    def ligar(self):
        pass

carros.py

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

    def ligar(self):
        print(f"O carro {self.modelo} está ligado.")

main.py

from veiculo import Carro

carro1 = Carro(marca="Ford", modelo="Focus", cor="Preto")
carro2 = Carro(marca="Chevrolet", modelo="Cruze", cor="Prata")
carro3 = Carro(marca="Honda", modelo="Civic", cor="Vermelho")

print(f"Carro 1: {carro1.marca} {carro1.modelo}, Cor: {carro1.cor}")
print(f"Carro 2: {carro2.marca} {carro2.modelo}, Cor: {carro2.cor}")
print(f"Carro 3: {carro3.marca} {carro3.modelo}, Cor: {carro3.cor}")
1 resposta

Oi, Ricardo! Como vai?

Agradeço por compartilhar.

A sua implementação tá bem organizada ao separar a classe Veiculo como abstrata e criar a classe Carro herdando seus atributos e comportamento. Isso mostra um bom entendimento de herança e polimorfismo, além do uso correto do @abstractmethod, que garante que todas as subclasses implementem o método ligar.

Uma dica interessante para o futuro é utilizar o método especial __str__, que permite definir como o objeto será exibido ao usar print(). Isso ajuda a evitar vários prints separados no código.


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

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

carro = Carro("Ford", "Focus", "Preto")
print(carro)

Neste código, o método __str__ define o texto que será exibido quando o objeto for impresso, deixando o código mais limpo e organizado.

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