1
resposta

Métodos classes

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

meu código só funciona com @staticmethod, não @classmethod, por quê:

1 resposta

Oi, Bruno! Tudo bem?

Existem algumas diferenças entre @staticmethod e @classmethod, como:

  1. @staticmethod:

    • Não recebe nenhum argumento especial (como cls ou self).
    • Funciona como uma função comum, mas dentro da classe.
    • Não pode acessar ou modificar o estado da classe ou da instância.
  2. @classmethod:

    • Recebe um argumento especial chamado cls, que representa a própria classe.
    • Pode acessar e modificar o estado da classe.
    • É útil quando você precisa alterar o estado da classe ou criar instâncias da classe.

Dessa forma, podemos converter o código usando usando @staticmethod para @classmethod, da seguinte maneira:

@classmethod
def listar_restaurantes(cls):
    print(f'{"Nome do restaurante".ljust(25)}|{"Categoria".ljust(25)}|{"Status"}')
    for restaurante in cls.restaurantes:  # Usando 'cls' para acessar atributos da classe
        print(f'{restaurante._nome.ljust(25)}|{restaurante._categoria.ljust(25)}|{restaurante.ativo}')

Para usar @classmethod, precisamos adicionar o argumento cls e garantir que estamos acessando os atributos da classe corretamente.

O seu código só funciona com @staticmethod pois quando usamos @classmethod precisamos acessar os atributos da classe através do argumento cls, porém, no código enviado acessamos Restaurante.restaurantes diretamente, o que pode funcionar, mas não é a forma correta de usar @classmethod.

Espero ter ajudado!

Um forte abraço e bons estudos!

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