1
resposta

[Projeto] resolução

class Carro:
    modelo = ''
    cor = ''
    ano = 0

# Instanciando e atribuindo valores
meu_carro = Carro()
meu_carro.modelo = 'Sedan Luxo'
meu_carro.cor = 'Preto'
meu_carro.ano = 2024

class Restaurante:
    # 3. Construtor com parâmetros e valor padrão
    def __init__(self, nome, categoria, endereco, capacidade):
        self.nome = nome
        self.categoria = categoria
        self.ativo = False  # Valor padrão
        # 2. Atributos extras
        self.endereco = endereco
        self.capacidade = capacidade

    # 4. Método especial para exibição formatada
    def __str__(self):
        status = "Ativo" if self.ativo else "Inativo"
        return f'Restaurante: {self.nome.ljust(15)} | Categoria: {self.categoria.ljust(10)} | Status: {status}'

# Criando instância utilizando o construtor
restaurante_exemplo = Restaurante('Sabor Local', 'Brasileira', 'Rua das Flores, 123', 50)

# Testando o método __str__
print(restaurante_exemplo)
1 resposta

Oii, Moacir! Tudo bem?

Parabéns por colocar a mão na massa! Praticar é realmente a única maneira de fixar os conceitos de Orientação a Objetos. Analisei o seu código e tenho alguns pontos muito legais para destacar.

  1. Classe Carro

Você resolveu o exercício de forma funcional, criando a classe e depois atribuindo valores diretamente à instância (meu_carro.modelo = ...). Isso funciona no Python porque a linguagem é dinâmica!

Dica Didática:
No seu código, ao definir modelo = '' logo abaixo de class Carro:, você criou o que chamamos de Atributos de Classe. Embora funcione, a convenção mais comum em POO (Programação Orientada a Objetos) para características que variam de carro para carro é usar o método construtor __init__, assim como você fez brilhantemente na classe Restaurante.

Isso garante que, assim que um carro nascer (for instanciado), ele já seja obrigado a ter essas características, evitando criar um carro "vazio" por acidente.

  1. Classe Restaurante

Aqui seu código ficou excelente! Você foi além do básico e aplicou ótimas práticas:

  • Construtor (__init__): Definiu corretamente os atributos de instância.
  • Parâmetros opcionais: O uso de ativo=False dentro do método (mesmo que no exercício pedisse no construtor, sua lógica de "Valor padrão" ali dentro está correta para inicialização).
  • Método __str__: Adorei a formatação! O uso do .ljust(15) deixa a saída no terminal muito mais organizada e profissional (parecendo uma tabela). E a lógica ternária ("Ativo" if self.ativo else "Inativo") é uma forma muito elegante e "Pythônica" de escrever código.

Continue firme nos estudos.

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