2
respostas

[Dúvida] Não recommhecendo atributo

  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} | 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)
                        

O codigo não esta´reconhecendo o atributo descrição e passando direto pro else:

2 respostas

E aí, Antônio! Beleza? Pelo que você mostrou, parece que tá tendo um problema com o atributo descrição não sendo reconhecido, certo?

Olha, algumas coisas que você pode verificar:

Primeiro, confirma se realmente todos os itens na lista _cardapio têm o atributo descrição. Pode ser que alguns não tenham e, por isso, caia no else.

Outra coisa, se você estiver usando herança ou algo do tipo, talvez o atributo descrição esteja em uma classe mãe e você esteja tentando acessá-lo de uma forma que não tá rolando. Nesse caso, talvez precisasse fazer umas adaptações na forma como tá buscando esse atributo.

Além disso, você pode tentar fazer um debug rápido: coloca um print(dir(item)) dentro do loop, antes da condição, pra ver todos os atributos e métodos disponíveis pra esse objeto. Assim, você vai conseguir ver se descrição realmente tá lá ou não.

E por último, só por garantia, confere se não tem nenhum erro de digitação ou algo assim, porque às vezes a gente passa batido.

Espero que uma dessas ideias te ajude a resolver esse pepino. Programação tem dessas, né? Às vezes, é só um detalhe que faz a diferença. Boa sorte aí!

Tive o mesmo problema.

Realizei o print(dir(item)) que o amigo indicou e está passando corretamente os atributos das duas classes, só que o if hasattr(item, 'descricao'): não está conseguindo encontrar o atributo descricao pois tem que ser _descricao.

Ficando assim:

@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}.Prato - Nome: {item._nome} | Preco: R${item._preco} | Descrição: {item._descricao}'
                print(mensagem_prato) 
            else:
                mensagem_bebida = f'{i}.Bebida - Nome: {item._nome} | Preco: R${item._preco} | Tamanho: {item._tamanho}'
                print(mensagem_bebida)