1
resposta

ERRO 'Prato' object has no attribute 'tamanho'

Fui executar o app.py e está dando erro: AttributeError: 'Prato' object has no attribute 'tamanho'

`from modelos.avaliacao import Avaliacao

from modelos.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}'

@classmethod
def listar_restaurantes(cls):
    print(f'{'Nome do restaurante'.ljust(25)} | {'Categoria'.ljust(25)} | {'Avaliação'.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}')

@property
def ativo(self):
    return '☑' if self._ativo else '☐'

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

@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,'descrição'):
            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á Tobias! Tudo bem?

Pelo que você descreveu, o erro AttributeError: 'Prato' object has no attribute 'tamanho' ocorre porque o objeto Prato não possui um atributo chamado tamanho.

Para resolver esse problema, você pode verificar algumas coisas:

  1. Verifique a Classe Prato: Certifique-se de que a classe Prato realmente possui um atributo tamanho. Se não, você precisará adicioná-lo. Por exemplo:

    class Prato:
        def __init__(self, nome, preco, descricao):
            self._nome = nome
            self._preco = preco
            self.descricao = descricao
            # Adicione o atributo tamanho, se necessário
            self.tamanho = None  # ou algum valor padrão
    
  2. Verifique o Tipo de Item: No método exibir_cardapio, você está verificando se o item tem o atributo descricao para decidir se é um prato. Certifique-se de que essa lógica está correta e que os itens de Prato são instanciados corretamente com todos os atributos necessários.

  3. Ajuste a Lógica de Exibição: Se tamanho não é um atributo de Prato, mas de outro tipo de item, como Bebida, você deve ajustar a lógica para verificar corretamente os tipos de itens e seus atributos. Por exemplo:

    if hasattr(item, 'descricao'):
        mensagem_prato = f'{i}. Nome: {item._nome} | Preço: R${item._preco} | Descrição: {item.descricao}'
        print(mensagem_prato)
    elif hasattr(item, 'tamanho'):
        mensagem_bebida = f'{i}. Nome: {item._nome} | Preço: R${item._preco} | Tamanho: {item.tamanho}'
        print(mensagem_bebida)
    

Certifique-se de que seus objetos estão sendo criados com todos os atributos necessários antes de serem adicionados ao cardápio.

Espero ter ajudado e bons estudos!

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