1
resposta

NameError: name 'cls' is not defined

Coloquei o cls, mas começou a dar este erro:

    cls.restaurantes = []
    ^^^
NameError: name 'cls' is not defined

fiz a substituição de todos os restauranes por cls.restaurantes, e incluí como argumento do class method:

class Restaurante:
    cls.restaurantes = []


    #criando construtor
    #self é a referência atual do objeto que estamos usando (é um nome convencionado)
    def __init__(self, nome, categoria): #esta é uma função reservada "dunder method", já existente em toda classe
        #aqui definimos os atributos (características) da classe (uma entidade)
        self._nome = nome.title()
        self.categoria = categoria
        # _ativo não foi declarado.
        self._ativo = False #com o _ antes de 'ativo', estamos indicando que este é um atributo privado. não queremos que ninguem o altere
        Restaurante.cls.restaurantes.append(self)
    
    def __str__(self):  
        return f'{self._nome} | {self.categoria}'
            
    # Método da classe. e não do objeto
    @classmethod
    def listar_restaurantes(cls): #Convenção usar argumento cls
        print(f'{'Nome do restaurante'.ljust(25)} | {'Categoria'.ljust(25)} | {'Status'}')
        for restaurante in Restaurante.cls.restaurantes:
            print(f'{restaurante._nome.ljust(25)} | {restaurante.categoria.ljust(25)} | {restaurante.ativo}')
1 resposta

Oi, Yuki! Como vai?

O problema está na linha onde você tenta definir cls.restaurantes = []. O cls é usado como um parâmetro em métodos de classe para se referir à própria classe, mas não utilizamos no momento da definição.

Altere sua definição de classe para que fique assim:

class Restaurante:
    restaurantes = []  # isto é um atributo de classe

Espero que dê tudo certo!

Forte abraço.

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