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