Os decoradores em Python são uma ferramenta poderosa que permite modificar o comportamento de funções ou métodos sem alterar seu código-fonte. Eles são amplamente utilizados para adicionar funcionalidades de forma elegante e eficiente. Neste tutorial, vamos explorar como os decoradores funcionam e demonstrar com exemplos práticos.
O que são Decoradores em Python?
Em poucas palavras, decoradores modificam a forma com que uma função opera, porém sem mudar a lógica da função em si. Eles ajudam a tornar seu código mais curto e mais “Pythonico”. Podemos pensar em decoradores como algo que “adiciona utilidade extra” a alguma função já existente.
Funções são Objetos em Python
Para entender decoradores, é essencial saber que funções em Python são objetos. Isso significa que elas podem ser assinaladas para alguma variável e passadas como argumento de outra função.
def func():
return 2
minha_funcao = func
retorno = minha_funcao()
print(retorno)
# output: 2
TestarPassando Funções como Argumentos
Podemos passar funções como argumentos para outras funções, o que é a base para criar decoradores.
def exibe_func(f):
print(f'Objeto de função recebido: {f}')
print(f'Nome da função: "{f.__name__}"')
exibe_func(func)
Criando um Decorador
Vamos criar um decorador simples que converte o retorno de uma função para letras maiúsculas.
def meu_decorador(func):
def meu_pacote(*args, **kwargs):
retorno = func(*args, **kwargs)
return retorno.upper()
return meu_pacote
@meu_decorador
def dizer_oi(nome):
return f'Olá, {nome}!'
print(dizer_oi('Juliano'))
# output: OLÁ, JULIANO!
TestarExplicação do Código
- Definição do Decorador: Criamos uma função
meu_decorador
que aceita uma funçãofunc
como argumento. - Função Interna: Dentro de
meu_decorador
, definimosmeu_pacote
, que chamafunc
e converte seu retorno para maiúsculas. - Retorno do Decorador:
meu_decorador
retornameu_pacote
, que é a função decorada. - Uso do Decorador: Utilizamos
@meu_decorador
acima da definição da funçãodizer_oi
, aplicando o decorador.
Decoradores com Argumentos
Podemos criar decoradores que aceitam argumentos. Vamos criar um decorador que repete a execução de uma função um número específico de vezes.
def repetir_vezes(n):
def decorador(func):
def wrapper(*args, **kwargs):
for _ in range(n):
resultado = func(*args, **kwargs)
return resultado
return wrapper
return decorador
@repetir_vezes(3)
def dizer_oi(nome):
print(f'Olá, {nome}!')
dizer_oi('Juliano')
# output:
# Olá, Juliano!
# Olá, Juliano!
# Olá, Juliano!
TestarExplicação do Código
- Definição do Decorador com Argumentos:
repetir_vezes
aceita um argumenton
e retorna o decoradordecorador
. - Função Interna:
decorador
definewrapper
, que executafunc
n
vezes. - Uso do Decorador: Utilizamos
@repetir_vezes(3)
para aplicar o decorador à funçãodizer_oi
.
Decoradores Aninhados
Podemos aplicar múltiplos decoradores a uma função. Vamos criar dois decoradores e aplicá-los a uma função.
def maiusculas(func):
def wrapper(*args, **kwargs):
retorno = func(*args, **kwargs)
return retorno.upper()
return wrapper
def repetir(func):
def wrapper(*args, **kwargs):
resultado = func(*args, **kwargs)
return resultado * 2
return wrapper
@repetir
@maiusculas
def saudacao(nome):
return f'Olá, {nome}!'
print(saudacao('Juliano'))
# output: OLÁ, JULIANO!OLÁ, JULIANO!
TestarExplicação do Código
- Definição dos Decoradores:
maiusculas
converte o retorno para maiúsculas erepetir
duplica o retorno. - Uso dos Decoradores: Utilizamos
@repetir
e@maiusculas
para aplicar ambos os decoradores à funçãosaudacao
.
Conclusão
Os decoradores em Python são uma ferramenta poderosa para modificar o comportamento de funções de forma elegante e eficiente. Eles permitem adicionar funcionalidades sem alterar o código-fonte das funções originais. Compreender e utilizar decoradores pode tornar seu código mais modular e reutilizável.
Experimente criar seus próprios decoradores e explore as possibilidades que eles oferecem para tornar seu código mais Pythonico e eficiente!
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