CodeGym /Cursos /Python SELF PT /Decoradores

Decoradores

Python SELF PT
Nível 14 , Lição 1
Disponível

5.1 Conhecendo os decoradores

Decoradores são funções que recebem outra função como argumento e retornam uma nova função, modificando ou ampliando o comportamento da função original. Os decoradores são usados para melhorar a legibilidade e a reutilização de código.

Decoradores permitem modificar o comportamento de funções ou métodos sem alterar seu código original. Por isso, são amplamente utilizados para adicionar funcionalidades, fazer logging, controlar acesso e para muitas outras tarefas.

A sintaxe dos decoradores em Python inclui o uso do símbolo @ antes do nome do decorador, que é colocado antes da definição da função.


@decorator
def my_function():
    pass

Isso é equivalente ao seguinte código:


def my_function():
    pass
        
my_function = decorator(my_function)

Pense bem no que está acontecendo aqui: declaramos a função my_function, mas depois a substituímos pela função decorator, onde nossa função é passada como parâmetro. A função decorator pode chamar nossa função como quiser.

5.2 Criando um decorador simples

Vamos ver um decorador simples que exibe uma mensagem antes e depois de chamar a função.


def my_decorator(func):
    def wrapper():
        print("Antes de chamar a função")
        func()
        print("Depois de chamar a função")

    return wrapper
        
@my_decorator
def say_hello():
    print("Hello!")
        
say_hello()

Explicação

Decorador (my_decorator): Esta função recebe a função func como argumento e retorna uma nova função wrapper, que chama func e adiciona comportamento extra antes e depois de sua execução.

Função com decorador (say_hello): A função say_hello é decorada com o my_decorator, o que adiciona comportamento extra quando é chamada.

Saída:


# Antes de chamar a função
Hello!
# Depois de chamar a função

5.3 Decoradores com argumentos

Os decoradores podem receber argumentos, permitindo ajustar seu comportamento de forma flexível.


def repeat(num_times):
    def decorator_repeat(func):
        def wrapper(*args, **kwargs):
            for _ in range(num_times):
                func(*args, **kwargs)

        return wrapper
        
    return decorator_repeat
        
@repeat(num_times=3)
def say_hello(name):
    print(f"Hello, {name}!")
        
say_hello("Alice")

Explicação

Decorador com argumentos (repeat): Esta função recebe um argumento num_times e retorna o decorador decorator_repeat.

Decorador (decorator_repeat): Este decorador recebe a função func e retorna uma nova função wrapper, que chama func num_times vezes.

Função com decorador (say_hello): A função say_hello é chamada três vezes graças ao decorador repeat.

Saída:


Hello, Alice!
Hello, Alice!
Hello, Alice!
Comentários
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION