Criando Decorators em funções no Python

Decorators são funções que modificam o comportamento de outras funções. Várias vezes temos a necessidade de antes de executar uma função específica, modificar ou validar alguma informação para depois executa-la.

Vários frameworks da linguagem já utiliza desse recurso para modificar a execução de algumas funções.

Por exemplo em flask, temos o decorator @app.route, que é utilizado para definir as rotas de uma api.

from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello World'
if __name__ == '__main__':
app.run()

Vejamos que nesse exemplo a função hello_world, tem apenas uma sintaxe que retorna uma string

“Hello World”, porém a parte de tratar o método e executá-lo como uma api é feito pelo decorator app.route. Sendo assim toda essa parte foi abstraído pelo decorator.

Criando o primeiro decorator

Decorator em python nada mais é que uma função, para criá-lo basta criar uma função.

def meu_primeiro_decorator(main_function):
def inner_function():
print('decorator')
return main_function()
return inner_function

Agora para utilizar esse decorator basta coloca-lo em cima de uma outra função:

@meu_primeiro_decorator
def funcao_com_decorator():
print('main_function')

Quando executamos o nosso código obtemos o valor:

decorator
main_function

Vejamos que pela ordem de execução do nosso decorator, primeiramente é executado o print(‘decorator’) e logo após é executado a outra função.

Criando o primeiro decorator com parâmetro

Podemos também criar decorators com parâmetros

def meu_primeiro_decorator_com_parametros(arg1):
def inner_function(function):
@wraps(function)
def wrapper(*args, **kwargs):
print('decorator')
print(f"Argument:{arg1}")
function(*args, **kwargs)
return wrapper
return inner_function

Agora para utilizar esse decorator basta coloca-lo em cima de uma outra função e atribuir o valor do parâmetro

@meu_primeiro_decorator_com_parametros('arg1')
def funcao_com_decorator_com_parametros():
print('main_function')

Quando executamos o nosso código obtemos o valor:

decorator
Argument:arg1
main_function

Vejamos que pela ordem de execução do nosso decorator, primeiramente é executado o print(‘decorator’), depois print(f”Argument:{arg1}”) e logo após é executado a outra função.

GitHub

https://github.com/filipemot/criando_decorators_em_python

--

--

--

Desenvolvedor Senior da empresa Imagem, MBA Arquitetura de Software

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Filipe Motta

Filipe Motta

Desenvolvedor Senior da empresa Imagem, MBA Arquitetura de Software

More from Medium

Translating Languages Using Python

Should you learn Python in 2022

5 Most Helpful Python Libraries

Python in Healthcare — Good Health now depends on Code too!!