Fala Galera!
Putz aparentemente tudo certo, mas o terminal não traz a saída como está na aula.
from modelos.restaurante import Restaurante
from modelos.cardapio.bebidas import Bebidas
from modelos.cardapio.prato import Prato
restaurante_praca = Restaurante('praça', 'gourmet')
bebida_suco = Bebidas('Suco de Laranja', 5.0, 'grande')
bebida_suco.aplicar_desconto()
prato_paozinho = Prato('Pãozinho', 2.0, 'O melhor pão da cidade')
prato_paozinho.aplicar_desconto()
restaurante_praca.adicionar_no_cardapio(bebida_suco)
restaurante_praca.adicionar_no_cardapio(prato_paozinho)
def main():
restaurante_praca.exibir_cardapio
if name == "main":
main()
_________________________________________________________________________________
# class Restaurante:
from avaliacao import Avaliacao
from cardapio.item_cardapio import ItemCardapio
class Restaurante:
restaurantes = []
# nome da classe por convenção sempre com a primeira letra maiuscula
def __init__(self, nome, categoria): #o self é a referência
self._nome = nome.title() #vai .alterar o nome para a primeira letra do nome para maiuscula
self._categoria = categoria.upper() #vai alterar todas as .letras para maiúscula
self._ativo = False #A boa prática é todos os atributos com underline ( nome, categoria, ativo)
self._avaliacao = []
self._cardapio = []
Restaurante.restaurantes.append(self)
def __str__(self):
return f'{self._nome} | {self._categoria}'
@classmethod
def listar_restaurantes(cls):
print(f'{'Nome do restaurante'.ljust(25)} |{'Categoria'.ljust(25)} | {'Avaliação'.ljust(25)} | {'Status'}')
for restaurante in cls.restaurantes:
print(f'{restaurante._nome.ljust(25)} | {restaurante._categoria.ljust(25)} | {str(restaurante.media_avaliacoes).ljust(25)} | {restaurante.ativo}')
@property
def ativo(self):
return '☒' if self._ativo else '☐'
def alternar_estado(self):
self._ativo = not self._ativo
def receber_avaliacao(self, cliente, nota):
if 0 < nota <= 5:
avaliacao = Avaliacao(cliente, nota)
self._avaliacao.append(avaliacao)
@property
def media_avaliacoes(self):
if not self._avaliacao:
return '-'
soma_das_notas = sum(avaliacao._notas for avaliacao in self._avaliacao)
quantidade_de_notas = len(self._avaliacao)
media = round(soma_das_notas/quantidade_de_notas, 1)
return media
def adicionar_no_cardapio(self, item):
if isinstance(item, ItemCardapio):
self._cardapio.append(item)
@property
def exibir_cardapio(self):
print(f'Cardapio do restaurante {self._nome}\n')
for i, item in enumerate(self._cardapio, start=1):
if hasattr(item, 'descrição'): #hasattr - se tem determinado atributo, faça isso, aqui está sendo usado para se tiver tamanho e bebida se tiver descrição é prato
mensagem_prato = f'{i}. Nome:{item._nome} | Preço: R${item._preco} | Descrição: {item.descricao}'
print(mensagem_prato)
else:
mensagem_bebida = f'{i}. Nome:{item._nome} | Preço: R${item._preco} | Descrição: {item.descricao}'
print(mensagem_bebida)
from abc import ABC, abstractmethod
class ItemCardapio(ABC):
def init(self, nome, preco):
self._nome = nome
self._preco = preco
@abstractmethod
def aplicar_desconto(self):
pass
from cardapio.item_cardapio import ItemCardapio
class Prato(ItemCardapio):
def init(self, nome, preco, descricao):
super().init(nome, preco)
self.descricao = descricao
def __str__(self):
return self._nome
def aplicar_desconto(self):
self._preco -= (self._preco * 0.08)
from cardapio.item_cardapio import ItemCardapio
class Bebidas(ItemCardapio):
def init(self, nome, preco, tamanho):
super().init(nome, preco)
self.tamanho = tamanho
def __str__(self):
return self._nome
def aplicar_desconto(self):
self._preco -= (self._preco * 0.05)
_______________________________________________