1
resposta

Melhoria na propriedade exibir_cardapio

Olá, ao invés de usar o hasattr para decidir se vai ser exibido o tamanho ou a descrição, poderia apenas ser chamado o método __str__ do item que está sendo iterado, assim, se for uma bebida, o __str__ já vai por definição exibir o tamanho, e se for prato, a descrição. O código ficaria da seguinte maneira:

Para a classe Bebida:

class Bebida(ItemCardapio):
    def __init__(self, nome, preco, tamanho):
        super().__init__(nome, preco)
        self._tamanho = tamanho
    def __str__(self):
        return f'Nome: {self._nome} | Preço: {self._preco} | Tamanho: {self._tamanho}'

Para a classe Prato

class Prato(ItemCardapio):
    def __init__(self, nome, preco, descricao):
        super().__init__(nome, preco)
        self._descricao = descricao
    def __str__(self):
        return f'Nome: {self._nome} | Preço: {self._preco} | Descrição: {self._descricao}'

A propriedade exibir_cardapio:

@property
    def exibir_cardapio(self):
        print(f'Cardapio do restaurante {self.nome}: \n')
        for i, item in enumerate(self.cardapio, start=1):
            print(f'{i}. {item.__str__()}')

A saída vai ser algo assim (recomendo adicionar uns ljust() para melhorar a estética):

Cardapio do restaurante Res1: 

1. Nome: prato_1 | Preço: 100000.0 | Descrição: descricao_1
2. Nome: bebida_1 | Preço: 100000000.0 | Tamanho: 250
1 resposta

Olá Isaac. Tudo bem?

A sua sugestão de utilizar o método __str__ nas classes Bebida e Prato para exibir o cardápio é uma excelente ideia! Isso torna o código mais limpo, já que cada classe é responsável por definir como suas informações devem ser apresentadas. Dessa forma, ao iterar sobre os itens do cardápio, basta chamar str(item) ou item.__str__() para obter a representação desejada, sem a necessidade de verificações adicionais como hasattr.

Seu código para as classes Bebida e Prato está bem estruturado. Ao definir o método __str__, você garante que cada tipo de item do cardápio saiba como se descrever adequadamente, seja incluindo o tamanho no caso das bebidas ou a descrição no caso dos pratos.

Além disso, ao modificar a propriedade exibir_cardapio para usar o __str__, você simplifica a lógica e evita a necessidade de condicionais para verificar atributos. Isso também facilita a manutenção e a extensão do código no futuro, caso novos tipos de itens sejam adicionados ao cardápio.

Parabéns por praticar e pela sugestão. Continue assim.

Espero ter ajudado e bons estudos!