1
resposta

Atualização de codigo

Item Cardapio.py

from abc import ABC, abstractmethod

class Itemcardapio(ABC):  # herda de ABC
    def __init__(self, tipo, nome, preco):
        self._tipo = tipo
        self._nome = nome
        self._preco = preco

    @abstractmethod
    def aplicar_desconto(self):
        pass

Prato.py

from modelos.cardapio.item_cardapio import Itemcardapio

class Prato(Itemcardapio):
    def __init__(self, tipo, nome,preco,descricao):
     super().__init__(tipo, nome ,preco)
     self.descricao = descricao

    def aplicar_desconto(self):
        self._preco -= (self._preco * 0.08)
        self.desconto = self._preco

Bebida.py

from modelos.cardapio.item_cardapio import Itemcardapio

class Bebida(Itemcardapio):
    def __init__(self, tipo,  nome,preco,tamanho):
     super().__init__(tipo, nome ,preco)
     self.tamanho = tamanho
    
    def aplicar_desconto(self):
        self._preco -= (self._preco * 0.08)
        self.desconto = self._preco

Sobremesa.py

from modelos.cardapio.item_cardapio import Itemcardapio

class Sobremesa(Itemcardapio):
    def __init__(self, tipo, nome, preco, tamanho, descricao):
     super().__init__(tipo, nome ,preco)
     self._tamanho = tamanho
     self._descricao = descricao

    def aplicar_desconto(self):
        self._preco -= (self._preco * 0.08)
        self.desconto = self._preco

Restaurante.py

    @property
    def exibir_cardapio(self):
        print(f'\nCardápio do restaurante {self._nome}\n{"-"*50}')
        for i, item in enumerate(self._cardapio, start=1):
            tipo = item._tipo.lower()
            if tipo == "prato":
                print(f'{i}.  {item._nome} - R${item._preco:.2f} | {item.descricao} | Desconto: R${item.desconto:.2f}')

            elif tipo == "bebida":
                print(f'{i}.  {item._nome}  ({item.tamanho}) - R${item._preco:.2f} | Desconto: R${item.desconto:.2f}')

            elif tipo == "sobremesa":
                print(f'{i}.  {item._nome} - R${item._preco}  ({item._tamanho}) | {item._descricao} | Desconto: R${item.desconto:.2f}')

App.py

from modelos.restaurante import Restaurante
from modelos.cardapio.bebida import Bebida
from modelos.cardapio.prato import Prato
from modelos.cardapio.sobremesa import Sobremesa

restaurante_praca = Restaurante('praça', 'Gourmet')
bebida_suco = Bebida("Bebida", "Suquinho", 2.99, "Grande")
prato_paozinho = Prato("Prato", "Pao", 8, "Pao Quente")
pudim = Sobremesa('Sobremesa', 'Pudimzinho', 10, 'Pequeno', 'Quentinho') 
prato_paozinho.aplicar_desconto()
bebida_suco.aplicar_desconto()
pudim.aplicar_desconto()
restaurante_praca.adicionar_items(bebida_suco)
restaurante_praca.adicionar_items(prato_paozinho)
restaurante_praca.adicionar_items(pudim)

def main():
    restaurante_praca.exibir_cardapio

if __name__ == '__main__':
    main()

Saida

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

1 resposta

Oi, João! Como vai?

Agradeço por compartilhar.

Gostei de ver que você estruturou bem as classes e aplicou o conceito de herança junto ao uso de métodos abstratos. Sua implementação do aplicar_desconto em cada classe está coerente com o que foi visto na aula de polimorfismo.

Continue explorando essa abordagem orientada a objetos, pois ela ajuda muito a deixar o código mais organizado e reutilizável.

Alura Conte com o apoio da comunidade Alura na sua jornada. Abraços e bons estudos!