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 ✓