Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

Quando utilizar o @classmethod e o @staticmethod?

Ainda não consegui entender para que serve e quando utilizar o @classmethod e o @staticmethod, posso estar enganado, mas o @classmethod parece um construtor dentro da classe, mas se ele realmente for um construtor, porque não colocar diretamente no init? Qual a função do @classmethod e porque usar? Qual a função do @staticmethod e quando usar?

3 respostas
solução!

Oi, tudo bem?

@classmethod significa, traduzindo ao pé da letra... Método da classe, e um classmethod é um método que não precisa de um objeto instanciado para ser invocado, você pode chamar esse método direto da classe. Pense que você tem uma classe de contas de banco e cria um @classmethod para contar o total de contas que você instanciou, não faz sentido ter esse método em todos os objetos, e sim ser um método da classe para que possa saber o total.

@staticmethod são métodos estáticos, que não são necessários declarar aquele primeiro argumento self pois não fará uso de nenhum recurso da classe diretamente. Importante lembrar que assim como o @classmethod, o @staticmethod também pode ser chamado sem ter instanciado a classe.

Sobre o @classmethod não faz sentido cada conta de banco saber o total de quantas contas há na classe, correto? Ele é como se fosse uma função fora da classe?

Sobre o @staticmethod Ele não fará uso de nenhum recurso da classe, então qual a função dele?

Isso, não faz sentido cada objeto da classe conta saber... Mas faz sentido a classe conta em si ter esse controle... Ele é uma função da classe, e não uma função dos objetos que implementam a classe.

São métodos estáticos, como usar um método para truncar o valor recebido ou alguma validação com valores passados por argumentos... No python, o próprio pycharm (ou a extenção SonarLint) recomenda que todo método dentro da classe que não faça o uso do self sejam métodos estaticos.