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

[Sugestão] Gostaria de melhorar meu código

items = []

class ItemCardapio:
    def __init__(self, tipo, tamanho, descricao, preco):
        self.tipo = tipo
        self.tamanho = tamanho
        self.descricao = descricao
        self.preco = preco
        self.preco_original = preco  # Armazena o preço original

class Sobremesa(ItemCardapio):
    def __init__(self, tipo, tamanho, descricao, preco):
        super().__init__(tipo, tamanho, descricao, preco)

    def __str__(self):
        return (
            f"Tipo: {self.tipo.ljust(25)} | "
            f"Tamanho: {self.tamanho.ljust(25)} | "
            f"Descrição: {self.descricao.ljust(25)}\n"
            f"Preço original: R${self.preco_original:<15.2f} | "
            f"Preço com desconto: R${self.preco:.2f}\n"
            f"{'----' * 30}"
        )

    def adicionar_item_cardapio_bebidas(self):
        if self not in items:
            items.append(self)
        else:
            print("Item já está no cardápio!")
    
    def adicionar_item_cardapio_pratos(self):
        if self not in items:
            items.append(self)
        else:
            print("Item já está no cardápio!")



    def aplicar_desconto_pratos(self):
            self.preco *= 0.92  # Aplica o desconto ao preço atual
    
    def aplicar_descontos_bebidas(self):
        self.preco *= 0.95

# Criando uma instância de Sobremesa
prato = Sobremesa('lasanha mexicana', 'médio', 'prato voltado para purista', 100.0)
bebida = Sobremesa('refrigerante', '2Litros', 'Guarana', 7)

#aplicando ao cardapio
prato.adicionar_item_cardapio_pratos()
bebida.adicionar_item_cardapio_bebidas()

# Aplicando desconto
prato.aplicar_desconto_pratos()
bebida.aplicar_descontos_bebidas()


for item in items:
    print(item)
1 resposta
solução!

Olá, Jean! Como vai?

É ótimo ver que você está se aprofundando na orientação a objetos com Python! Vamos dar uma olhada no seu código e ver como podemos melhorá-lo.

  1. Redundância nos métodos de adicionar itens: Você tem dois métodos adicionar_item_cardapio_bebidas e adicionar_item_cardapio_pratos que fazem exatamente a mesma coisa. Você pode simplificar isso criando um único método adicionar_item_cardapio.

  2. Métodos de desconto: Da mesma forma, os métodos aplicar_desconto_pratos e aplicar_descontos_bebidas são muito semelhantes. Você pode criar um método único aplicar_desconto que aceita um parâmetro para o valor do desconto.

  3. Nome da classe: Como você está usando a classe Sobremesa para outros tipos de itens (como pratos e bebidas), talvez seja interessante renomear a classe para algo mais genérico, como ItemCardapio.

Aqui está uma versão refatorada do seu código com essas sugestões:

items = []

class ItemCardapio:
    def __init__(self, tipo, tamanho, descricao, preco):
        self.tipo = tipo
        self.tamanho = tamanho
        self.descricao = descricao
        self.preco = preco
        self.preco_original = preco

    def __str__(self):
        return (
            f"Tipo: {self.tipo.ljust(25)} | "
            f"Tamanho: {self.tamanho.ljust(25)} | "
            f"Descrição: {self.descricao.ljust(25)}\n"
            f"Preço original: R${self.preco_original:<15.2f} | "
            f"Preço com desconto: R${self.preco:.2f}\n"
            f"{'----' * 30}"
        )

    def adicionar_item_cardapio(self):
        if self not in items:
            items.append(self)
        else:
            print("Item já está no cardápio!")

    def aplicar_desconto(self, desconto):
        self.preco *= (1 - desconto)

# Criando instâncias de ItemCardapio
prato = ItemCardapio('lasanha mexicana', 'médio', 'prato voltado para purista', 100.0)
bebida = ItemCardapio('refrigerante', '2Litros', 'Guarana', 7)

# Adicionando ao cardápio
prato.adicionar_item_cardapio()
bebida.adicionar_item_cardapio()

# Aplicando desconto
prato.aplicar_desconto(0.08)  # 8% de desconto
bebida.aplicar_desconto(0.05)  # 5% de desconto

for item in items:
    print(item)

Espero que essas sugestões ajudem a tornar seu código mais limpo e eficiente.

Bons estudos!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓.