Decoradores Python explicados com exemplos

Aprimore suas funções com decoradores

Aprenda a estender e modificar o comportamento de suas funções usando decoradores Python. Este tutorial explica o conceito, fornece exemplos práticos e mostra como escrever seus próprios decoradores.

Programação
Autor
Afiliação
Data de Publicação

5 de fevereiro de 2024

Data de Modificação

29 de abril de 2025

Palavras-chave

Decoradores Python, Decoradores em Python

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")
        result = func(*args, **kwargs)
        print("Após a chamada da função")
        return result
    return wrapper

@my_decorator
def say_hello(name):
    print(f"Hello, {name}!")

say_hello("Alice")

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}:")
                result = func(*args, **kwargs)
            return result
        return wrapper
    return decorator

@repeat(3)
def greet(name):
    print(f"Hello, {name}!")

greet("Bob")

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, use functools.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")
            result = func(*args, **kwargs)
            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

Boa programação e aproveite para aprimorar suas funções com decoradores!

Explore mais artigos

Nota

Aqui estão mais artigos da mesma categoria para ajudá-lo a se aprofundar no tópico.

placeholder

placeholder
Nenhum item correspondente
De volta ao topo

Reuso

Citação

BibTeX
@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}
}
Por favor, cite este trabalho como:
Kassambara, Alboukadel. 2024. “Decoradores Python explicados com exemplos.” February 5, 2024. https://www.datanovia.com/pt/learn/programming/python/advanced/decorators-explained.html.