Os decoradores em Python são uma ferramenta poderosa que permite modificar ou estender o comportamento de funções ou métodos sem alterar seu código fonte original. Neste tutorial, vamos explorar o que são decoradores, como funcionam e como você pode utilizá-los em seus projetos Python.
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, primeiro precisamos lembrar que funções em Python são objetos. Isso significa que elas podem ser assinaladas para alguma variável, passadas como argumento de outra função e até mesmo retornadas por outras funções.
def func():
return 2
minha_funcao = func
retorno = minha_funcao()
print(retorno)
# output: 2
Passando Funções como Argumentos
Podemos passar funções como argumentos para outras funções, o que é a base para criar decoradores.
def hello():
return 'Oi, José!'
def outra_funcao(func):
print('Outro código aqui')
print(func())
outra_funcao(hello)
# output:
# Outro código aqui
# Oi, José!
TestarCriando Decoradores
Vamos construir um decorador simples que modifica o comportamento de uma função para que ela retorne seu resultado em 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!
TestarExplicando o Código
- Definindo o Decorador: Criamos uma função
meu_decorador
que aceita uma funçãofunc
como argumento. - Função Interna: Dentro de
meu_decorador
, definimos uma nova funçãomeu_pacote
que aceita qualquer número de argumentos (*args
) e argumentos nomeados (**kwargs
). - Chamando a Função Original:
meu_pacote
chama a função originalfunc
com os argumentos recebidos e transforma o resultado em letras maiúsculas. - Decorando a Função: Usamos a sintaxe
@meu_decorador
para aplicar o decorador à funçãodizer_oi
.
Decoradores com Argumentos
Às vezes, queremos que nossos decoradores aceitem argumentos. Para isso, precisamos de um nível extra de funções.
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!
TestarExplicando o Código
- Função Externa:
repetir_vezes
aceita um argumenton
e retorna o decorador. - Decorador: O decorador
decorador
aceita a funçãofunc
e retorna owrapper
. - Wrapper: O
wrapper
executa a funçãon
vezes.
Decoradores na Vida Real
Na prática, muitos frameworks e bibliotecas Python utilizam decoradores. Por exemplo, a biblioteca Dash
usa decoradores para definir callbacks em dashboards.
from dash import Dash, html, dcc
from dash.dependencies import Input, Output
app = Dash(__name__)
app.layout = html.Div([
dcc.Input(id='input', value='Digite algo', type='text'),
html.Div(id='output')
])
@app.callback(
Output(component_id='output', component_property='children'),
[Input(component_id='input', component_property='value')]
)
def update_output_div(input_value):
return f'Você digitou: {input_value}'
if __name__ == '__main__':
app.run_server(debug=True)
Explicando o Código
- Definindo o Layout: Criamos um layout simples com um
Input
e umDiv
. - Callback Decorator: Usamos o decorador
@app.callback
para definir que a funçãoupdate_output_div
será chamada sempre que o valor doInput
mudar.
Conclusão
Os decoradores em Python são uma ferramenta poderosa para modificar e estender o comportamento de funções de maneira limpa e eficiente. Eles são amplamente utilizados em bibliotecas e frameworks, tornando o código mais legível e modular. Experimente criar seus próprios decoradores e veja como eles podem simplificar seu código!
Se você gostou deste tutorial sobre decoradores em Python, compartilhe com seus colegas e continue explorando as possibilidades que essa linguagem incrível oferece!
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