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.

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
Formação Claude Code
Domine Claude Code do absoluto zero até o avançado
- 120 aulas
- 4 projetos
- 9h 48min
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

VPS Hostinger para seu sistema
10% OFF extraVPS com SSD NVMe e backups semanais. O cupom MATHEUSHORADECODAR é aplicado automaticamente pelo link.
Ver planos com 10% OFF →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()

Crie sistemas com IA para vender
Prompts, modelos e checklists para criar e publicar seu sistema com IA e preparar a oferta para o primeiro cliente.
Quero o e-book gratuito Receba o livro e os bônus no seu e-mail.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
Formações
Formação Vibe Coding
Do Prompt ao Produto: Crie Software Real com IA
- 474 aulas
- 20 projetos
- 39h 30min
Blog | Mais populares

Como limitar números decimais em Python?
Neste artigo vamos aprender como limitar números decimais em Python, de uma forma simples com recursos da própria linguagem. Pra limitar casas decimais em Python […]

Como inverter uma string em Python
Neste artigo você vai aprender a como inverter uma string em Python, de uma maneira simples para você utilizar em seus programas Conteúdo também disponível […]
Como programar Python [dicas e códigos iniciantes aqui]
Python é uma linguagem de programação muito popular e uma de alto nível utilizada em diferentes tipos de aplicações, como para o desenvolvimento web, em Machine […]
