Pessoal, vi aqui várias instruções que infelizmente não funcionaram inclusive do próprio video da aula, códigos baixados do git oficial do curso que não rodaram e etc. Em resumo estou achando um mini-curso repleto de erros. Seria legal que a Alura reveja este curso para corrigir os erros que os orientadores estão passando para os alunos. Pode ser que a versão utilizada no curso aceitasse o formado de sintaxe que utilizaram, mas pelo que estou enxergando para as versões 3+ não estão rolando.
Em fim, para os lindos aí que estiverem com problema ao executar a rotina abaixo:
Restaurante.listar_restaurantes()
E estiver recebendo o seguinte retorno:
Nome do restaurante | Categoria | Avaliação | Status
Praça | GOURMET | <bound method Restaurante.media_avaliacoes of <modelos.restaurante.Restaurante object at 0x000002155668FAA0>> | ☐
Mexican Food | MEXICANA | <bound method Restaurante.media_avaliacoes of <modelos.restaurante.Restaurante object at 0x000002155668FDD0>> | ⌧
Japa | JAPONESA | <bound method Restaurante.media_avaliacoes of <modelos.restaurante.Restaurante object at 0x000002155668FB60>> | ☐
A solução para mim foi bem simples. Apenas incluir o parenteses na funçáo conforme inlustrado abaixo:
Antes:
f'{str(restaurante.media_avaliacoes).ljust(25)} | '
Depois:
f'{str(restaurante.media_avaliacoes()).ljust(25)} | '
Prontinho. Apenas isso.
Vou incluir aqui abaixo também todo o meu código e o link do git para baixarem correspondente até a aula "04. Composição" do módulo "Importando classe e composição".
link git: Clique aqui
Em app.py:
from modelos.restaurante import Restaurante
#-------------------------------------------------------------
restaurante_praca = Restaurante('praça', 'gourmet')
restaurante_mexicano = Restaurante('mexican food', 'Mexicana')
restaurante_japones = Restaurante('japa', 'Japonesa')
#-------------------------------------------------------------
def main():
print("-----------------------------------------------")
restaurante_praca.receber_avaliacao('Gui', 10)
restaurante_praca.receber_avaliacao('Lais', 8)
restaurante_praca.receber_avaliacao('Emy', 5)
restaurante_mexicano.alternar_status()
Restaurante.listar_restaurantes()
print("-----------------------------------------------")
if __name__ == '__main__':
main()
Em modelos/restaurante.py:
# from avaliacao import Avaliacao # Error
from .avaliacao import Avaliacao # OK!
class Restaurante:
restaurantes = []
#Construtor ▼
def __init__(self, nome, categoria):
self._nome = nome.title()
self._categoria = categoria.upper()
self._ativo = False
Restaurante.restaurantes.append(self)
self._avaliacao = []
def __str__(self):
return f'{self._nome} | {self._categoria}'
@property
def ativo(self):
return '⌧' if self._ativo else '☐'
@classmethod
def listar_restaurantes(cls):
print(f'{"Nome do restaurante".ljust(25)} | '
f'{"Categoria".ljust(25)} | '
f'{"Avaliação".ljust(25)} | '
f'{"Status"}')
for restaurante in cls.restaurantes:
print(f'{restaurante._nome.ljust(25)} | '
f'{restaurante._categoria.ljust(25)} | '
# f'{str(restaurante.media_avaliacoes).ljust(25)} | ' # Error
f'{str(restaurante.media_avaliacoes()).ljust(25)} | ' # OK!
f'{restaurante.ativo}')
def alternar_status(self):
self._ativo = not self._ativo
def receber_avaliacao(self, cliente, nota):
avaliacao = Avaliacao(cliente, nota)
self._avaliacao.append(avaliacao)
# @property # Error
# @property # Comentar, não utilizar o @property... OK!
def media_avaliacoes(self):
if not self._avaliacao:
return 0
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
Em modelos/avaliacao.py:
class Avaliacao:
def __init__(self, cliente, nota):
self._cliente = cliente
self._nota = nota
Protinho meus amores. Espero que ajude. #tmj