Oi, Bruno! Tudo bem?
Existem algumas diferenças entre @staticmethod e @classmethod, como:
@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.
@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 ✓