Sobes.tech
Junior

Como se pode chamar um decorador sem usar o símbolo @?

sobes.tech IA

Resposta da IA

Um decorador é uma função que aceita outra função como argumento e retorna uma nova função, que geralmente amplia a funcionalidade da original. Pode-se chamar um decorador sem o símbolo @, aplicando explicitamente a função decoradora à função original e atribuindo o resultado à mesma ou a uma nova variável.

Exemplo: decorando a função my_function com o decorador my_decorator.

Uso da sintaxe @:

# definição de my_decorator
def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Antes de chamar a função")
        result = func(*args, **kwargs)
        print("Depois de chamar a função")
        return result
    return wrapper

@my_decorator
def my_function():
    print("Dentro de my_function")

my_function()

Chamada sem o símbolo @:

# definição de my_decorator (igual à acima)
def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Antes de chamar a função")
        result = func(*args, **kwargs)
        print("Depois de chamar a função")
        return result
    return wrapper

def my_function():
    print("Dentro de my_function")

# Aplicar explicitamente o decorador
my_function = my_decorator(my_function)

my_function()

Em ambos os casos, o resultado será o mesmo. A chamada a my_decorator(my_function) retorna a função wrapper, que é então atribuída à variável my_function, substituindo a função original. A sintaxe com @ é apenas açúcar sintático para essa operação de atribuição.