Neste artigo vamos ver qual a diferença entre @staticmethod e @classmethod e em quais situações devemos utilizar cada um destes.

Fala programador(a), beleza? Bora aprender mais sobre Python!
Primeiramente é bom entendermos os métodos, que são basicamente as ações que um objeto possui
Uma função, definida por def, dentro de uma classe
A partir daí temos a bifurcação entre @classmethod e @staticmethod, que também são metodos mas com propriedades diferentes
O @classmethod é basicamente um método que passa a classe como primeiro argumento de forma implícita, quando você define um método como classmethod, provavelmente você quer usar ele pela classe e não pela instância da classe
Mas pode ser chamado tanto pela classe quanto pela instância
Já no @staticmethod temos uma função que não passa implicitamente nem o objeto e nem a classe como parâmetro, é basicamente uma função dentro da classe
Geralmente utilizados quando você tem uma função que executa lógica que interage com o objeto/classe, aí você pode criar um staticmethod com este intuito
Vamos ver um exemplo com os três casos:
class Teste(object):
def metodoNormal(self):
print("Olá sou um método normal")
@classmethod
def metodoClass(cls, self):
print("Sou um método de:")
print(cls)
print("Chamado por: ")
print(self)
@staticmethod
def metodoStatic():
print("E sou um método estático")
obj = Teste()
# chamando o método normal
obj.metodoNormal()
# chamando método de classe pela Class e pelo Object
Teste.metodoClass(Teste)
obj.metodoClass(obj)
# chamando método estático
obj.metodoStatic()
Neste caso ilustramos todas as possibilidades de um method, classmethod e staticmethod
Perceba as saídas, o método classmethod foi chamado também pela Classe
Conclusão
Neste artigo vimos a diferença entre @staticmethod e @classmethod
Basicamente o staticmethod é uma função de uma classe que interage de alguma forma com o objeto, ela poderia estar solta no código, mas por fim de organização e manutenção colocamos ela na classe
Já o @classmethod é uma forma especial de declarar um método que pode ser chamado tanto pela classe como pela instância do objeto, e um grande detalhe é que precisamos passar de forma explícita a classe como argumento
Confira também nosso catálogo de cursos gratuitos, com aulas semanais no YouTube