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
TestarNo 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
TestarEssa 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)
TestarNeste 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.
Cursos de programação gratuitos com certificado
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
- Conteúdos gratuitos
- Projetos práticos
- Certificados
- +20 mil alunos e comunidade exclusiva
- Materiais didáticos e download de código
Comentários