1
resposta

[Dúvida] @classmethod, parametro cls

Quando o professor no vídeo fez o seguinte ajuste no método abaixo:

@staticmethod
def listar_restaurantes(cls):
    """
    Método da classe, e não da instancia
    """
    print(f"{'Restaurante'.ljust(25)}  {'Categoria'.ljust(25)}  {'Status'}")
    for restaurante in cls.restaurantes:
        print(f"{restaurante._nome.ljust(25)}  {restaurante._categoria.ljust(25)}  {restaurante.ativo}")

'

Ou seja, informou o parâmetro de convenção (cls), minha chamada em baixo ficou errada apresentando o erro:

Restaurante.listar_restaurantes()

Erro:

Traceback (most recent call last):
  File "C:\Users\Willian Santos\PycharmProjects\POO\AluraOOP\restaurante.py", line 46, in <module>
    Restaurante.listar_restaurantes()
TypeError: listar_restaurantes() missing 1 required positional argument: 'cls'

O professor ao menos até esse vídeo não informou que é necessário ou qual parâmetro devemos informar, eu subentendi que seria a classe e ajustei com:

Restaurante.listar_restaurantes(Restaurante)

1 resposta

Olá Willian, tudo bem com você?

Ao observar seu código, notei que você usou o decorador @staticmethod em vez de @classmethod como mostrado em aula. O @staticmethod é usado para criar métodos estáticos, que são diferentes dos métodos de classe. Os métodos estáticos são responsáveis apenas por realizar operações que não dependem de nenhum estado específico da classe ou da instância.

Deixo abaixo o código correto, onde é preciso trocar de staticmethod para classmethod:

@classmethod
 def listar_restaurantes(cls):
        print(f'{'Nome do restaurante'.ljust(25)} | {'Categoria'.ljust(25)} | {'Status'}')
        for restaurante in cls.restaurantes:
            print(f'{restaurante._nome.ljust(25)} | {restaurante._categoria.ljust(25)} | {restaurante.ativo}')

Com essa alteração, salve seu código e ele funcionará ao chamar apenas Restaurante.listar_restaurantes()

Espero ter ajudado. Continue mergulhando em conhecimento e não hesite em voltar ao fórum para continuar aprendendo e interagindo com a comunidade.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!

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