1
resposta

[Sugestão] Mão na massa: refatorando uma função

sobremesa.py

from modelos.cardapio.item_cardapio import ItemCardapio

class Sobremesa(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.08)

#restaurante.py

    @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, 'descricao'):
                mensagem_prato = f'{i}. Nome: {(item._nome).ljust(10)} | Preço: R${str(item._preco).ljust(5)} | Descrição: {item.descricao}'
                print(mensagem_prato)
            elif hasattr(item, 'tamanho'):
                mensagem_sobremesa =  f'{i}. Nome: {(item._nome).ljust(10)} | Preço: R${str(item._preco).ljust(5)} | Tamanho: {item.tamanho}'
                print(mensagem_sobremesa)
            else:
                mensagem_bebida =  f'{i}. Nome: {(item._nome).ljust(10)} | Preço: R${str(item._preco).ljust(5)} | Volume: {item.volume}ml'
                print(mensagem_bebida)

app.py

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

restaurante_praca = Restaurante('praça', 'Gourmet')
sobremes1 = Sobremesa('Chocolate', 10.00, 'Grande')
prato_1 = Prato('Parmediana', 40.00, 'Prato suculento de molho de tomate, bife e queijo')
bebida_1 = Bebida('Red Bull', 13, 475)
sobremes1.aplicar_desconto()
prato_1.aplicar_desconto()
bebida_1.aplicar_desconto()
restaurante_praca.adicionar_no_cardapio(bebida_1)
restaurante_praca.adicionar_no_cardapio(sobremes1)
restaurante_praca.adicionar_no_cardapio(prato_1)

def main():
   restaurante_praca.exibir_cardapio

if __name__ == '__main__':
    main()
1 resposta

Oi, Gustavo! Como vai?

Agradeço por compartilhar.

Eu gostei da sua iniciativa na atividade de refatoração, tá aplicando os conceitos de polimorfismo e identificando comportamentos diferentes entre os itens do cardápio. O uso de hasattr mostra que você pensou em como tratar cada tipo de objeto, o que é um passo importante no aprendizado.

Siga explorando esse tipo de melhoria no código, pois essas decisões ajudam bastante na legibilidade e manutenção do projeto. *

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