Entendendo Decoradores
Vamos começar com um exemplo simples. Abra uma nova sessão do interpretador Python:
python3
Temos uma função que calcula o quadrado de um número:
def square(x):
return x**2
Agora, digamos que queremos adicionar um recurso à função square que registra a entrada e a saída da função toda vez que ela é chamada. Podemos fazer isso usando um decorador.
Aqui está o código para o decorador logger:
def logger(func):
def wrapper(x):
print("Calling function:", func.__name__)
print("Input:", x)
result = func(x)
print("Output:", result)
return result
return wrapper
Agora podemos usar este decorador para aprimorar a função square:
@logger
def square(x):
return x**2
Quando chamamos square(5), a saída será:
Calling function: square
Input: 5
Output: 25
Como pode ver, o decorador adicionou a funcionalidade desejada à função square sem alterar seu código-fonte.