Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Resolução]

Boa noite, envio o algoritmo das alterações que fiz para o exercício. Feedbacks de boas práticas são bem-vindos.

sobremesa.py

from modelos.cardapio.item_cardapio import ItemCardapio

class Sobremesa(ItemCardapio):
    
    def __init__(self, nome, preco, tipo, tamanho):
        super().__init__(nome, preco)
        self._tipo = tipo
        self._tamanho = tamanho

    def __str__(self):
        return self.get_nome
    
    @property
    def get_tipo(self):
        return self._tipo
    @property
    def get_tamanho(self):
        return self._tamanho
    
    def aplicar_desconto(self):
        self._preco -= (self._preco * 0.1)

restaurante.py

from modelos.avaliacao import Avaliacao
from modelos.cardapio.item_cardapio import ItemCardapio
from modelos.cardapio.prato import Prato
from modelos.cardapio.bebida import Bebida
from modelos.cardapio.sobremesa import Sobremesa

class Restaurante:
    ''''Representa a um restaurante e suas características'''
    restaurantes = []
    
    def __init__(self, nome, categoria): #self é uma convenção, mas poderia ser chamado de objeto ou this
        '''
        Inicializa uma instância de Restaurante.

        Parâmetros:
        - nome (str): o nome do Restaurante
        - categoria (str): categoria do restaurante
        '''
        self._nome = nome.title()
        self._categoria = categoria.upper()
        self._ativo = False
        self._avaliacao = []
        self._cardapio = []
        Restaurante.restaurantes.append(self)

    def __str__(self):
        '''
        Retorna uma representação em str do restaurante 
        '''
        return f'{self._nome.ljust(25)} | {self._categoria.ljust(25)} | {self.ativo}'
    
    @classmethod
    def listar_restaurantes(cls):
        '''
        Exibe uma lista formada de todos os restaurantes
        '''
        print(f'{'Nome do restaurante'.ljust(25)} | {'Categoria'.ljust(25)} | {'Média'.ljust(25)} | {'Status'.ljust(25)}')
        for restaurante in cls.restaurantes:
            print (f'{restaurante._nome.ljust(25)} | {restaurante._categoria.ljust(25)} | {str(restaurante.media_avaliacoes).ljust(25)} | {restaurante.ativo}') #media_avaliacoes vem do método
    
    @property
    def ativo(self):
        '''Retorna um símbolo indicando '''
        return '☑' if self._ativo else '☐'
    
    def alternar_estado(self):
        '''Alterna o estado de disponibilidade do restaurante'''
        self._ativo = not self._ativo

    def receber_avaliacao(self,cliente, nota):
        '''Regitra uma avaliação para a instância de Restaurante
        
        Parâmetros:
        - cliente (str) = nome do Cliente
        - nota (float) = nota atribuída ao restaurante pelo Cliente
        '''
        avaliacao = Avaliacao(cliente,nota)
        self._avaliacao.append(avaliacao)

    @property
    
    def media_avaliacoes(self):
        '''
        Calcula e retorna a média de avaliações:

        - média da nota dividido por 2 (já que os clientes dão nota de 1 a 10 mas o aplicativo exibe de 1 a 5)
        - mensagem de aviso (str) caso não haja avaliações
        '''
        if not self._avaliacao:
            return 'SEM AVALIAÇÃO'
        else:
            soma_das_notas = sum(avaliacao._nota for avaliacao in self._avaliacao)
            quantidade_de_notas = len(self._avaliacao)
            media = round((soma_das_notas / quantidade_de_notas)/2, 1) #1 é a quantidade de dígitos depoiss da vírgula
            return media 

    def adicionar_no_cardapio(self,item):
        if isinstance(item, ItemCardapio): #is True é subentendido no if
            self._cardapio.append(item)

    @property
    def exibir_cardapio(self):
        print(f'Cardápio do restaurante: {self._nome}\n')

        for i,item in enumerate(self._cardapio,start=1):
            #poderia ser for i,item in enumerate(ItemCardapio.item_cardapio,start=1):
            #se a classe houver um vetor com as iterações criadas                                                        
            
            # if hasattr(item,'get_descricao'): (também pode ser desse jeito)
            if isinstance(item, Prato):
                mensagem = f'{i}. Nome: {item.get_nome} | Preço: {item.get_preco:.2f} | Descrição: {item.get_descricao}'
            
            elif isinstance(item,Sobremesa):
                mensagem = f'{i}. Nome: {item.get_nome} | Preço: {item.get_preco:.2f} | Tipo: {item.get_tipo} | Tamanho: {item.get_tamanho}'

            else:
                mensagem = f'{i}. Nome: {item.get_nome} | Preço: {item.get_preco:.2f} | Tamanho: {item.get_tamanho}'
            
            print(mensagem)   
1 resposta
solução!

Oi, Caio, tudo bem?

Parabéns pelo resultado e agradeço por compartilhar no fórum suas respostas para os desafios propostos. Tenho certeza que sua contribuição vai ser muito valiosa para a comunidade do fórum!

Continue mergulhando em tecnologia e se tiver dúvidas, conte com o fórum.

Abraços e bons estudos!