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

[Dúvida] porque exibir_cardapio tem que ser uma property?

porque exibir_cardapio tem que ser uma property?

1 resposta
solução!

Olá, Eduardo! Tudo bem?

A razão pela qual o método exibir_cardapio deve ser uma property é porque ele é utilizado para exibir informações que não devem ser modificadas diretamente. Em outras palavras, queremos apenas ler o cardápio, não o alterar através desse método.

Quando usamos a anotação @property, transformamos o método em um atributo de leitura. Isso significa que podemos acessar exibir_cardapio como se fosse um atributo, sem precisar chamar como uma função (sem parênteses). Além disso, isso ajuda a manter a integridade dos dados, pois impede que o cardápio seja alterado inadvertidamente.

Aqui está um exemplo prático para ilustrar:

class Restaurante:
    def __init__(self, nome, cardapio):
        self._nome = nome
        self._cardapio = cardapio

    @property
    def exibir_cardapio(self):
        print(f'Cardápio 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} | Preço: R${item._preco} | Descrição: {item.descricao}'
                print(mensagem_prato)
            else:
                mensagem_bebida = f'{i}. Nome: {item._nome} | Preço: R${item._preco} | Tamanho: {item.tamanho}'
                print(mensagem_bebida)

# Exemplo de uso
class Item:
    def __init__(self, nome, preco, descricao=None, tamanho=None):
        self._nome = nome
        self._preco = preco
        self.descricao = descricao
        self.tamanho = tamanho

prato_paozinho = Item(nome="Paozinho", preco=2.0, descricao="O melhor pão da cidade")
bebida_suco = Item(nome="Suco de Melancia", preco=5.0, tamanho="grande")

restaurante = Restaurante(nome="Praça", cardapio=[prato_paozinho, bebida_suco])
restaurante.exibir_cardapio

Ao usar @property, você pode acessar restaurante.exibir_cardapio diretamente, sem parênteses, e ele exibirá o cardápio corretamente.

Espero ter ajudado e bons estudos!

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