3
respostas

Erro de Import

Não sei mais o que fazer, alterei os nomes dos caminhos, alterei o nome do metodo, conferi e nada funciona:

from modelos.avaliacao import Avaliacao

class Restaurante:
restaurantes = []

def __init__(self, nome, categoria):
    self._nome = nome.title()  
    self.categoria = categoria.upper()
    self._ativo = False
    self._avaliacao = []
    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 do Restaurante'.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_notas).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):
    avaliacao = Avaliacao(cliente, nota)
    self._avaliacao.append(avaliacao)

@property
def media_avaliacoes(self):
    if not self._avaliacao:
        return 0
    soma_nota = sum(avaliacao._notas for avaliacao in self._avaliacao)
    quantidade_notas = len(self._avaliacao)
    media_notas = round(soma_nota / quantidade_notas,1)
    return media_notas

Insira aqui a descrição dessa imagem para ajudar na acessibilidade

3 respostas

Olá Caique! Como vai?

O problema aqui é que você fez a chamada de uma propriedade que não existe.

Na linha 20 da sua classe restaurente você fez a chamada da propriedade media_notas, ela não existe, o que você tem como método/propriedade é media_avaliacoes.

Logo, a solução é trocar a chamada dessa propriedade onde está media_notas. Ao fazer isso o seu código deve rodar sem maiores problemas.

Espero ter ajudado e bons estudos!

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

Olá Armano, Estou bem e você? Espero que bem.

Troquei os dois métodos, o da linha 20 e o return e mesmo assim não roda.

Irei enviar o código completo novamente abaixo:

from modelos.avaliacao import Avaliacao

class Restaurante:
restaurantes = []

def __init__(self, nome, categoria):
    self._nome = nome.title()  
    self.categoria = categoria.upper()
    self._ativo = False
    self._avaliacao = []
    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 do Restaurante'.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):
    avaliacao = Avaliacao(cliente, nota)
    self._avaliacao.append(avaliacao)

@property
def media_avaliacoes(self):
    if not self._avaliacao:
        return 0
    soma_nota = sum(avaliacao._notas for avaliacao in self._avaliacao)
    quantidade_notas = len(self._avaliacao)
    media_avaliacoes  = round(soma_nota / quantidade_notas,1)
    return media_avaliacoes

Oi, Caique! Perdão a demora em responder!

O seu erro não está mais no import — do jeito que você explicou, o problema agora é sintaxe no f-string na linha do print(...). Você está usando aspas simples por fora e aspas simples por dentro ao mesmo tempo, então o Python “fecha” a string antes da hora e o código não executa.

Resolva fazendo o seguinte: troque as aspas externas do f-string para aspas duplas (ou escape as aspas internas). Ajuste seu código assim:


@classmethod
def listar_restaurantes(cls):
    print(f"{'Nome do Restaurante'.ljust(25)} | {'Categoria do Restaurante'.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}")

Com isso, o arquivo passa a rodar e o from modelos.avaliacao import Avaliacao volta a ser testado de fato (antes, o Python nem chega a executar devido ao erro de sintaxe).

Fico à disposição!