Decoradores classmethod e staticmethod em Python

Quando você está se aprofundando no mundo do Python, você encontrará várias maneiras de definir métodos dentro de uma classe. Duas dessas maneiras são usando os decoradores @staticmethod
e @classmethod
. Entender a diferença entre esses dois pode ser crucial para escrever um código eficiente e fácil de manter . Vamos explorar o que os diferencia.
Vá do zero ao primeiro projeto em apenas 2 horas com o curso Python para Iniciantes.
Comece agora@staticmethod
?Um @staticmethod
(ou método estático) é um método que se comporta como uma função regular, mas pertence a uma classe. Internamente, o método não tem acesso nem à classe (cls
), nem à instância (self
) na qual é chamado. Isso significa que ele não pode modificar o estado da instância do objeto nem o estado da classe.
Em geral, métodos estáticos são usados para agrupar funções que têm uma conexão lógica com uma classe, apesar de não usar seus atributos diretamente.
Aqui está um exemplo simples:
class Calculadora:
@staticmethod
def somar(x, y):
return x + y
# Método estático chamado usando o nome da classe
print(Calculadora.somar(5, 3)) # Saída: 8
TestarNeste exemplo, somar
é um método estático que simplesmente retorna a soma de dois números. Note que ele apenas recebe dois argumentos, x
e y
, e não recebe um parâmetro representando a instância (self
) ou a classe (cls
).
Por outro lado, um @classmethod
(método de classe) é um método que recebe a classe como o primeiro argumento. Isso é útil para casos em que você precisa ter acesso ao objeto da classe, por exemplo, quando você quer criar métodos alternativos para inicializar uma instância da classe.
Aqui está um exemplo para ilustrar:
class Bebida:
nome = "Bebida"
@classmethod
def imprimir_nome(cls):
print(f"Esta é uma {cls.nome}")
class Café(Bebida):
nome = "Café"
# Método de classe chamado usando o nome da classe
Bebida.imprimir_nome() # Saída: Esta é uma Bebida
Café.imprimir_nome() # Saída: Esta é um Café
TestarNeste caso, imprimir_nome
é um método de classe que imprime o nome da classe na qual é chamado. Quando chamado na classe Bebida
, ele imprime “Bebida”, e quando chamado na subclasse Café
, ele imprime “Café”.
Para esclarecer ainda mais, considere o seguinte trecho de código:
class MinhaClasse:
def metodo(self):
return 'método de instância chamado', self
@classmethod
def metodo_de_classe(cls):
return 'método de classe chamado', cls
@staticmethod
def metodo_estatico():
return 'método estático chamado'
Testarself
.self
), mas pode acessar o objeto da classe via cls
.cls
ou self
. Ele funciona como uma função regular, mas pertence ao namespace da classe.Em resumo, @staticmethod
e @classmethod
em Python são usados para definir métodos que não estão vinculados a uma instância da classe. Um @staticmethod
não recebe um primeiro argumento implícito de forma alguma, é como uma função regular que pertence a uma classe. Um @classmethod
, no entanto, recebe a classe como o primeiro argumento implícito , permitindo que ele acesse variáveis e métodos da classe. Entender quando usar cada um pode ajudá-lo a escrever um código que não é apenas mais limpo, mas também mais intuitivo.
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
Este site utiliza cookies para melhorar sua experiência. Ao continuar navegando, você concorda com o uso de cookies.
Comentários
30xpsua opinião nos comentários Entre para a Asimov