avaliacao.py
class Avaliacao:
def __init__(self, cliente, nota):
self._cliente = cliente
self._nota = nota
restaurante.py:
from modelos.avaliacao import Avaliacao
class Restaurante:
restaurantes = []
def __init__(self, nome, categoria): # Construtor com dois parâmetros
self._nome = nome.title() # Formata o nome do restaurante para primeira letra maiúscula
self.categoria = categoria.upper() # Formata a categoria para maiúsculas
self._ativo = False # Atributo privado para controle de ativo quando adiciona # "_"
self._avaliacao = []
Restaurante.restaurantes.append(self)
def __str__(self):
return f'Restaurante: {self._nome}, Categoria: {self.categoria}, Ativo: {self.ativo}'
@classmethod
def listar_restaurantes(cls):
print(f'{"Nome":<25} | {"Categoria":<25} | {"Avaliação":<25} | {"Ativo"}')
for restaurante in cls.restaurantes:
print(f'{restaurante._nome:<25} | {restaurante.categoria:<25} | {restaurante.media_avaliacoes:<25} | {restaurante.ativo}')
@property
def ativo(self):
return '✔️' if self._ativo else '❌'
def alternar_estado(self):
self._ativo = not self._ativo
print(f'O restaurante {self._nome} agora está {"ativo" if self._ativo else "inativo"}.')
def receber_avaliacao(self, cliente, nota):
avaliacao = Avaliacao(cliente, nota)
self._avaliacao.append(avaliacao)
@property
def media_avaliacoes(self):
if not self._avaliacao:
return 0
soma_das_notas = sum(avaliacao._nota for avaliacao in self._avaliacao)
media = round(soma_das_notas / len(self._avaliacao), 2)
return media
app.py
from modelos.restaurante import Restaurante
restaurante_praca = Restaurante('praça', 'Gourmet')
restaurante_praca.receber_avaliacao('Gui', 10)
restaurante_praca.receber_avaliacao('Lais', 8)
restaurante_praca.receber_avaliacao('Emy', 2)
def main():
Restaurante.listar_restaurantes()
if __name__ == '__main__':
main()