Python

Diferença entre @staticmethod e @classmethod no Python

28 de abril de 2020

Diferença entre @staticmethod e @classmethod no Python

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

diferenca entre @staticmehod e @classmethod capa

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

Subscribe
Notify of
guest
0 Comentários
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x