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