Métodos Estáticos em Python: Como Definir e Usá-los

Ana Maria Gomes
5 minutos de leitura

Conteúdos do tutorial

Métodos estáticos são uma funcionalidade útil em Python que permitem definir métodos que podem ser chamados em uma classe sem a necessidade de uma instância da classe. Eles são semelhantes aos métodos estáticos em outras linguagens de programação como Java ou C++. Neste post do blog, vamos explorar como definir métodos estáticos em Python e quando usá-los.

Definindo Métodos Estáticos Usando o Decorador staticmethod

Para criar um método estático em Python, você pode usar o decorador @staticmethod. Esse decorador modifica um método para ser um método estático, o que significa que ele não espera que o primeiro argumento seja a instância (self) quando chamado. Aqui está um exemplo simples:

class MinhaClasse:
    @staticmethod
    def o_metodo_estatico(x):
        print(x)

MinhaClasse.o_metodo_estatico(2)  # imprime 2
Testar

No exemplo acima, o_metodo_estatico é um método estático que recebe um argumento, x, e o imprime. Você pode chamar esse método diretamente na classe, como mostrado.

O Método Antigo: Usando staticmethod como uma Função

Antes da introdução da sintaxe de decorador no Python 2.4, métodos estáticos eram definidos usando a função staticmethod de uma maneira um pouco diferente:

class MinhaClasse:
    def o_metodo_estatico(x):
        print(x)
    o_metodo_estatico = staticmethod(o_metodo_estatico)

MinhaClasse.o_metodo_estatico(2)  # imprime 2
Testar

Essa abordagem é funcionalmente idêntica ao uso do decorador @staticmethod, mas é menos legível e só é necessária se você estiver trabalhando com versões muito antigas do Python (2.2 e 2.3).

Quando Usar Métodos Estáticos

É importante notar que métodos estáticos devem ser usados com parcimônia. Em muitos casos, uma função de nível superior (que não faz parte de uma classe) pode ser mais clara e apropriada. No entanto, se você tem um método que logicamente pertence a uma classe, mas não precisa acessar dados específicos da instância, um método estático pode ser a escolha certa.

Exemplo de um Método Estático em Ação

Vamos olhar para um exemplo mais prático envolvendo uma classe Cachorro:

class Cachorro:
    contador = 0  # esta é uma variável de classe
    cachorros = []  # esta é uma variável de classe

    def __init__(self, nome):
        self.nome = nome  # self.nome é uma variável de instância
        Cachorro.contador += 1
        Cachorro.cachorros.append(nome)

    def latir(self, n):  # este é um método de instância
        print(f"{self.nome} diz: {'au! ' * n}")

    @staticmethod
    def chamada(n):
        print(f"Há {Cachorro.contador} cachorros.")
        if n >= len(Cachorro.cachorros) or n < 0:
            print("Eles são:")
            for cachorro in Cachorro.cachorros:
                print(f"  {cachorro}")
        else:
            print(f"O cachorro no índice {n} é {Cachorro.cachorros[n]}.")

fido = Cachorro("Fido")
fido.latir(3)
Cachorro.chamada(-1)
rex = Cachorro("Rex")
Cachorro.chamada(0)
rex.chamada(-1)
Testar

Neste exemplo, chamada é um método estático que imprime o número de cachorros e, dependendo do argumento, ou lista todos os cachorros ou especifica um cachorro em um índice particular. Note que chamada pode ser chamado na própria classe (Cachorro.chamada(-1)) ou em uma instância da classe (rex.chamada(-1)), e se comporta da mesma maneira em ambos os casos.

Resumo

Métodos estáticos em Python são definidos usando o decorador @staticmethod e podem ser chamados na própria classe ou em uma instância da classe. Eles não recebem um primeiro argumento implícito e são úteis quando você precisa de um método que é logicamente parte de uma classe, mas não precisa acessar dados específicos da instância. Lembre-se de usar métodos estáticos com discernimento, pois nem sempre são a melhor abordagem.

Inscreva-se gratuitamente e fique atualizado

Receba toda semana um resumo dos principais conteúdos da Asimov direto no seu e-mail. 100% livre de spam.

Áreas de interesse: