Python para Desenvolvedores

2ª edição, revisada e ampliada

Capítulo 17: Decoradores


Decoradores (decorators) são funções que são aplicadas em outras funções e retornam funções modificadas. Decoradores tanto podem ser usados para criar ou alterar características das funções (que são objetos) quanto para “envolver” as funções, acrescentando uma camada em torno delas com novas funcionalidades.

Decorador

A partir do Python 2.4, o caractere [email protected] pode ser usado para automatizar o processo de aplicação do decorador:

In [1]:
def decorator(f):
   f.decorated = True
   return f

@decorator
def func(arg):
   return arg

Com isso, foi criado um atributo novo na função, que pode ser usado depois, quando a função for executada.

Exemplo:

In [2]:
# Função decoradora
def dumpargs(f):

    # Função que envolverá a outra
    def func(*args):

        # Mostra os argumentos passados para a função
        print args

        # Retorna o resultado da função original
        return f(*args)

    # Retorna a função modificada
    return func

@dumpargs
def multiply(*nums):

    m = 1

    for n in nums:
        m = m * n
    return m

print multiply(1, 2, 3)
(1, 2, 3)
6

A saída apresenta os parâmetros que a função decorada recebeu.

In [1]:
 
Out[1]: