Sugestão de melhoria no enunciado:
No item que diz “Certifique-se de que a classe Sobremesa mantenha a herança do método aplicar_desconto de ItemCardapio”, a redação pode gerar confusão conceitual, pois aplicar_desconto é um método abstrato.
- Talvez ficasse mais claro para quem está aprendendo se o enunciado indicasse explicitamente algo como:
“Implemente o método abstrato aplicar_desconto da classe ItemCardapio” e depois reforçar, na correção, o que seria esse metodo abstrato e sua obrigação de implementação.
- Além disso, poderia ser interessante esclarecer no enunciado se o objetivo é:
- apenas cumprir o contrato (por exemplo, com pass), ou
- já definir uma regra concreta de desconto (como um percentual específico).
Isso ajudaria a alinhar melhor o enunciado com a intenção do exercício e evitar ambiguidades para os alunos.
Minha Resposta
- Resposta do exercício:
from modelos.cardapio.item_cardapio import ItemCardapio
# 1- Crie uma classe chamada Sobremesa que herda de ItemCardapio,
class Sobremesa(ItemCardapio):
# 2- adicione atributos específicos como tipo, tamanho e descricao à classe Sobremesa.
def __init__(
self, nome: str, preco: float, tipo: str, tamanho: str, descricao: str
):
super().__init__(nome, preco)
# 3- Ajuste a inicialização da classe para incluir esses novos atributos, possibilitando a criação de um novo item ao cardápio do restaurante.
self.tipo = tipo
self.tamanho = tamanho
self.descricao = descricao
# 4- Atualize o método __str__ conforme necessário para refletir essas mudanças.
def __str__(self):
return self._nome
# 5- Certifique-se de que a classe Sobremesa mantenha a herança do método aplicar_desconto de ItemCardapio.
def aplicar_desconto(self):
self._preco -= self._preco * 0.15
- Tentativa de implementação conforme as aulas até o momento da nova classe Sobremesa no método exibir_cardapio da classe Restaurante:
@property
def exibir_cardapio(self):
print(f"Cardápio do restaurante {self._nome}\n".upper())
# para mostrar a lista enumerada começando do 1
for i, item in enumerate(self._cardapio, start=1):
# fazer uma validação
# para verificar se tem o atributo(hasattr)
if hasattr(item, "tipo"):
mensagem_sobremesa = f"{i}. Nome: {item._nome} |Preço: R$ {item._preco:.2f} | Tipo: {item.tipo} | Descricao: {item.descricao} | Tamanho: {item.tamanho}"
print(mensagem_sobremesa)
elif hasattr(item, "descricao"):
mensagem_prato = f"{i}. Nome: {item._nome} | Preço: R$ {item._preco:.2f} | Descricao: {item.descricao}"
print(mensagem_prato)
else:
mensagem_bebida = f"{i}. Nome: {item._nome} | Preço: R$ {item._preco:.2f} | Tamanho: {item.tamanho}"
print(mensagem_bebida)
- Implementaçao em 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("Suco de Melancia", 5.00, "grande")
bebida_suco.aplicar_desconto()
prato_paozinho = Prato("Pãozinho", 2.00, "O melhor pão da cidade")
prato_paozinho.aplicar_desconto()
sobremesa_pudim = Sobremesa(
"Pudim", 10.00, "sobremesa", "médio", "Pudim de leite condensado"
)
sobremesa_pudim.aplicar_desconto()
restaurante_praca.adicionar_no_cardapio(bebida_suco)
restaurante_praca.adicionar_no_cardapio(prato_paozinho)
restaurante_praca.adicionar_no_cardapio(sobremesa_pudim)
def main():
# como é property não precisa usar ()
restaurante_praca.exibir_cardapio
if __name__ == "__main__":
main()
- saída ao rodar o código:
CARDÁPIO DO RESTAURANTE PRAÇA
1. Nome: Suco de Melancia | Preço: R$ 4.60 | Tamanho: grande
2. Nome: Pãozinho | Preço: R$ 1.90 | Descricao: O melhor pão da cidade
3. Nome: Pudim |Preço: R$ 8.50 | Tipo: sobremesa | Descricao: Pudim de leite condensado | Tamanho: médio