porque exibir_cardapio tem que ser uma property?
porque exibir_cardapio tem que ser uma property?
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!