Introdução
Os decoradores Python são uma ferramenta poderosa que permite estender e modificar o comportamento das funções sem modificar permanentemente seu código. Eles fornecem uma maneira limpa e expressiva de adicionar funcionalidades às suas funções, tornando seu código mais modular e fácil de manter.
Neste tutorial, explicaremos o conceito de decoradores, mostraremos como eles funcionam e forneceremos exemplos práticos para ajudá-lo a incorporar decoradores em seus próprios projetos.
O que são decoradores?
Um decorator em Python é uma função que recebe outra função como argumento, adiciona algumas funcionalidades a ela e retorna uma nova função. Decoradores são frequentemente usados para:
- Registro: Registrar quando as funções são chamadas.
- Controle de acesso: Verificando permissões antes de executar uma função.
- Cache: Armazenando resultados de chamadas de funções caras.
- Tempo: Medindo o tempo de execução de funções.
Como funcionam os decoradores
Quando você aplica um decorador a uma função usando a sintaxe @decorator_name
, o Python passa a função decorada para o decorador. O decorador retorna uma nova função que aprimora ou modifica o comportamento da função original.
Exemplo básico de decorador
Abaixo está um exemplo simples que demonstra como criar e usar um decorador para adicionar comportamento antes e depois de uma chamada de função.
def my_decorator(func):
def wrapper(*args, **kwargs):
print("Antes da chamada da função")
= func(*args, **kwargs)
result print("Após a chamada da função")
return result
return wrapper
@my_decorator
def say_hello(name):
print(f"Hello, {name}!")
"Alice") say_hello(
Resultados:
Antes da chamada da função
Olá, Alice!
Após a chamada da função
Exemplo avançado: Decorador com argumentos
Decoradores também podem ser projetados para aceitar argumentos, o que permite modificações de comportamento ainda mais flexíveis.
def repeat(n):
def decorator(func):
def wrapper(*args, **kwargs):
for i in range(n):
print(f"Repita as saudações {i+1}/{n}:")
= func(*args, **kwargs)
result return result
return wrapper
return decorator
@repeat(3)
def greet(name):
print(f"Hello, {name}!")
"Bob") greet(
Resultados:
Repita as saudações 1/3:
Olá, Bob!
Repita as saudações 2/3:
Olá, Bob!
Repita as saudações 3/3:
Olá, Bob!
Melhores práticas para usar decoradores
Mantenha a simplicidade:
Escreva decoradores pequenos e focados que fazem uma coisa bem feita.Use functools.wraps:
Ao escrever decoradores, usefunctools.wraps
para preservar os metadados da função original.import functools def my_decorator(func): @functools.wraps(func) def wrapper(*args, **kwargs): print("Antes da chamada da função") = func(*args, **kwargs) result print("Após a chamada da função") return result return wrapper
Documente seus decoradores:
Comente e documente claramente a finalidade e o uso de cada decorador.
Conclusão
Os decoradores em Python fornecem uma maneira flexível e elegante de modificar o comportamento das funções. Ao dominar decoradores, você pode escrever código mais modular e reutilizável, aprimorar a funcionalidade sem duplicação de código e implementar questões transversais, como registro e tratamento de erros, de maneira mais limpa. Experimente os exemplos fornecidos aqui e tente criar seus próprios decoradores para ver como eles podem simplificar suas tarefas de codificação.
Leitura adicional
- Python para iniciantes: seu primeiro script
- Sintaxe e variáveis em Python
- Programação funcional em Python
Boa programação e aproveite para aprimorar suas funções com decoradores!
Explore mais artigos
Aqui estão mais artigos da mesma categoria para ajudá-lo a se aprofundar no tópico.
Reuso
Citação
@online{kassambara2024,
author = {Kassambara, Alboukadel},
title = {Decoradores Python explicados com exemplos},
date = {2024-02-05},
url = {https://www.datanovia.com/pt/learn/programming/python/advanced/decorators-explained.html},
langid = {pt}
}