1
resposta

erro 'ModuleNotFoundError' e 'AttributeError'

Quando rodo o arquivo do restaurante, da esse erro. Quando rodo o app.py, da attributeError: mensagem_bebida = f'{i}. Nome: {item._nome} | Preço: R${item._preco} | Tamanho: {item.tamanho}'
AttributeError: 'Bebida' object has no attribute 'tamanho'. Did you mean: '_tamanho'?, ja tentei de tudo

Quando rodo o arquivo do restaurante, da esse erro de ModuleNotFound. Quando rodo o app.py, da attributeError: mensagem_bebida = f'{i}. Nome: {item._nome} | Preço: R${item._preco} | Tamanho: {item.tamanho}'

AttributeError: 'Bebida' object has no attribute 'tamanho'. Did you mean: '_tamanho'?,

Alguem pode me ajudar? ja tentei de tudo


```from pyaobjetos.avaliacao import Avaliacao
from pyaobjetos.cardapio.item_cardapio import ItemCardapio

class Restaurante:
    restaurantes = []

    def __init__(self, _nome, _categoria):
        self._nome = _nome.title()
        self._categoria = _categoria.upper()
        self._ativo = False
        self._avaliacao = []
        self._cardapio = []
        Restaurante.restaurantes.append(self)

    def __str__(self):
        return f'{self._nome} | {self._categoria} | {self.ativo}'


    @classmethod
    def listar_restaurantes(cls):
        print(f'{"Nome do restaurante".ljust(25)} | {"Categoria".ljust(25)} | {"Avaliações".ljust(25)} | {"Status"}')
        for restaurante in cls.restaurantes:
            print(f'{restaurante._nome.ljust(25)} | {restaurante._categoria.ljust(25)} | {str(restaurante.media_avaliacoes).ljust(25)} | {restaurante.ativo}')


    def alternar_estado(self):
        self._ativo = not self._ativo

    def receber_avaliacao(self, cliente, nota):
        if 0 < nota <= 5:
            avaliacao = Avaliacao(cliente, nota)
            self._avaliacao.append(avaliacao)

    
    @property
    def ativo(self):
        return 'Aberto' if self._ativo else 'Fechado'

    @property
    def media_avaliacoes(self):
        if not self._avaliacao:
            return '-'
        soma_das_notas = sum(avaliacao._nota for avaliacao in self._avaliacao)
        quantidade_de_notas = len(self._avaliacao)
        media = round(soma_das_notas / quantidade_de_notas, 1)
        return media
    

    def adicionar_no_cardapio(self, item):
        if isinstance(item, ItemCardapio):
            self._cardapio.append(item)

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

Olá, João! Tudo bem?

Vamos resolver os dois problemas que você está enfrentando.

  1. ModuleNotFoundError: Esse erro geralmente ocorre quando o Python não consegue encontrar o módulo que você está tentando importar. Verifique se o caminho do módulo pyaobjetos está correto e se ele está no mesmo diretório ou se o diretório está no PYTHONPATH. Caso contrário, você pode precisar ajustar o caminho ou adicionar um arquivo __init__.py no diretório para torná-lo um pacote Python.

  2. AttributeError: O erro indica que o objeto Bebida não possui o atributo tamanho. Pelo que você descreveu, parece que o atributo correto é _tamanho. Você pode corrigir isso alterando a linha:

    mensagem_bebida = f'{i}. Nome: {item._nome} | Preço: R${item._preco} | Tamanho: {item.tamanho}'
    

    Para:

    mensagem_bebida = f'{i}. Nome: {item._nome} | Preço: R${item._preco} | Tamanho: {item._tamanho}'
    

Certifique-se de que todos os atributos estão sendo acessados corretamente com o prefixo _ se eles forem privados.

Espero ter ajudado e bons estudos!

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