Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Questão sobre a implementação do método `exibir_cardapio` na classe Restaurante

Olá pessoas!

Na implementação do método exibir_cardapio da classe Restaurante, temos uma série de ifs pra testar a presença de atributos específicos para compor a string. Não seria melhor definir o método __str__ dentro de cada classe-filha de ItemCardapio para que o próprio objeto tome conta das informações que devem ser exibidas? Ou isso criaria outros problemas?

Por exemplo, na classe Prato poderíamos ter

def __str__(self):
    return f'Nome: {self._nome} | Preço: R$ {self._preco} | Descrição: {self.descricao}'

e na classe Bebida

def __str__(self):
    return f'Nome: {self._nome} | Preço: R$ {self._preco} | Tamanho: {self.tamanho}'

Dessa forma, o método exibir_cardapio em Restaurante poderia ser simplificado para

def exibir_cardapio(self):
        print(f'Cardapio do restaurante {self._nome}\n')
        for i, item in enumerate(self._cardapio, start=1):
            mensagem_prato = f'{i}. {item}'

e continuaria produzindo o resultado desejado.

Abraço!

2 respostas
solução!

Oii, tudo bem?

Sua ideia de implementar o método __str__ em cada classe filha de ItemCardapio é bastante interessante e pode sim ser uma alternativa válida para simplificar o método exibir_cardapio na classe Restaurante.

Nesse caso, cada objeto seria responsável por saber como se exibir, o que é um princípio bastante comum em orientação a objetos chamado de encapsulamento.

Mas, é importante lembrar que essa abordagem pode ter algumas implicações. Por exemplo, se no futuro você quiser exibir as informações de um ItemCardapio de maneira diferente dependendo do contexto, você precisaria alterar o método __str__ ou criar um novo método para isso.

Já na abordagem atual, onde a lógica de exibição está na classe Restaurante, você poderia criar um novo método para exibir as informações de uma maneira diferente sem precisar alterar as classes Prato e Bebida.

Espero ter ajudado.

Um abraço e bons estudos.

Olá, Lorena!

Entedi. O ponto é deixar a classe Restaurante como única responsável pela geração do cardápio. Minha sugestão deixaria a classe Restaurante mais simples, porém complicaria o programa como um todo.

Muito obrigado pelo feedback!

Abraço!