Entenda Métodos Estáticos e de Classe em Python

Os métodos estáticos e métodos de classe em Python diferem no uso do decorador @staticmethod e @classmethod e no acesso a atributos da classe.

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

  1. O método somar() recebe dois parâmetros e retorna a soma.
  2. Como ele não usa self, ele é decorado com @staticmethod.
  3. 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

  1. incrementar() modifica o atributo de classe valor.
  2. Como usa cls, ele pode acessar a classe sem instanciar um objeto.
  3. Podemos chamá-lo diretamente pela classe e atualizar o valor compartilhado.

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

Compartilhe este tutorial: O que são métodos estáticos e métodos de classe em Python

Compartilhe este tutorial

Continue aprendendo:

Como fazer herança em Python

A herança em Python permite que uma classe filha herde atributos e métodos de uma classe pai, facilitando a reutilização de código.

Tutorial anterior

O que é polimorfismo em Python

O polimorfismo em Python permite que um mesmo método tenha diferentes comportamentos dependendo da classe que o implementa.

Próximo tutorial