O que são métodos estáticos e métodos de classe em Python?
Na Programação Orientada a Objetos (POO), os métodos de uma classe podem ser classificados como métodos de instância, estáticos ou de classe. Cada um possui características específicas e usos distintos.
Métodos Estáticos
Um método estático em Python é definido com o decorador @staticmethod
e não recebe automaticamente uma referência à instância da classe. Isso significa que ele pode ser chamado sem precisar criar um objeto.
class Utilidades:
@staticmethod
def somar(a, b):
return a + b
print(Utilidades.somar(5, 10))
Explicação do código
- O método
somar()
recebe dois parâmetros e retorna a soma. - Como ele não usa
self
, ele é decorado com@staticmethod
. - Podemos chamá-lo diretamente pela classe sem instanciar um objeto.
Métodos de Classe
Já um método de classe é definido com o decorador @classmethod
. Ele recebe como primeiro argumento uma referência à própria classe (cls
), permitindo modificar atributos de classe.
class Contador:
valor = 0
@classmethod
def incrementar(cls):
cls.valor += 1
return cls.valor
print(Contador.incrementar())
Explicação do código
incrementar()
modifica o atributo de classevalor
.- Como usa
cls
, ele pode acessar a classe sem instanciar um objeto. - Podemos chamá-lo diretamente pela classe e atualizar o valor compartilhado.
Quando usar métodos estáticos e de classe?
Compreender a diferença entre métodos estáticos e de classe permite otimizar o uso da Programação Orientada a Objetos. Métodos estáticos são úteis para funções auxiliares, enquanto métodos de classe permitem modificar atributos compartilhados.
Algumas aplicações:
- Criação de funções auxiliares dentro de classes.
- Manipulação de atributos de classe sem instâncias.
- Uso em classes utilitárias e helpers.
Dicas para quem está começando
- Use
@staticmethod
para métodos que não precisam acessar atributos de classe. - Utilize
@classmethod
quando precisar modificar atributos compartilhados. - Prefira métodos de instância quando precisar acessar
self
. - Evite modificar estados globais em métodos estáticos.
Contribuições de Pedro Vasconcellos