Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Erro no def listar():

Olá, achei estranho a forma que foi escrito esse print, além disso no meu projeto está com esse erro:

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

Eu utilizo o VSCode

class Restaurante:
    restaurantes=[]

    def __init__(self, nome, categoria):
        self.nome = nome
        self.categoria = categoria
        self._ativo = False
        Restaurante.restaurantes.append(self)
    
    def __str__(self):
        return f'{self.nome} / {self.categoria}'
    
    def listar():
        print(f'{'Nome do restaurante'.ljust(25)} | {'Categoria'.ljust(25)} | {'Status'}')
        for i in Restaurante.restaurantes:
            print(f'{i.nome.ljust(25)} | {i.categoria.ljust(25)} | {i.ativo}')

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

rest_praca = Restaurante('Praça','Gourmet')
rest_pizza = Restaurante('Pizza Express','Italiana')


Restaurante.listar()
1 resposta
solução!

Oi João, tudo certo por aí? Espero que sim!

Parece que há um problema na formatação da string no método listar() da classe Restaurante. Ao usar aspas simples para delimitar a string, você está interferindo com as aspas simples dentro da string. Para corrigir isso, você pode alternar entre aspas simples e duplas para delimitar a string, ou usar barras invertidas antes das aspas simples dentro da string. Além disso, você também precisa corrigir o nome do atributo, que deve ser _ativo em vez de ativo no método listar().

Deixo o código com as alterações logo abaixo:

class Restaurante:
    restaurantes = []

    def __init__(self, nome, categoria):
        self.nome = nome
        self.categoria = categoria
        self._ativo = False
        Restaurante.restaurantes.append(self)

    def __str__(self):
        return f'{self.nome} / {self.categoria}'

    @classmethod
    def listar(cls):
        print(f'{"Nome do restaurante".ljust(25)} | {"Categoria".ljust(25)} | {"Status"}')
        for i in cls.restaurantes:
            print(f'{i.nome.ljust(25)} | {i.categoria.ljust(25)} | {i.ativo}')

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


rest_praca = Restaurante('Praça', 'Gourmet')
rest_pizza = Restaurante('Pizza Express', 'Italiana')

Restaurante.listar()

As alterações são:

  1. Adição de @classmethod antes do método listar() para indicar que é um método de classe.
  2. Substituição de aspas simples por aspas duplas para delimitar a string no método listar().
  3. Uso de cls em vez de Restaurante dentro do método listar() para referenciar a classe.

Teste essas alterações e me diga se resolveu.

Espero ter ajudado!

Caso tenha dúvidas, estarei a disposição.

Abraços e bons estudos! :)