Sobes.tech
Junior

Hoe roep je een decorator aan zonder het @-symbool te gebruiken?

sobes.tech AI

Antwoord van AI

Een decorator is een functie die een andere functie als argument neemt en een nieuwe functie teruggeeft, die meestal de functionaliteit van de originele uitbreidt. Een decorator zonder het @-symbool kan worden aangeroepen door de decoratorfunctie expliciet op de originele functie toe te passen en het resultaat aan dezelfde of een nieuwe variabele toe te wijzen.

Voorbeeld: decoreren van de functie my_function met de decorator my_decorator.

Gebruik van de @-syntax:

# definitie van my_decorator
def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Voor de functie wordt aangeroepen")
        result = func(*args, **kwargs)
        print("Na de functieaanroep")
        return result
    return wrapper

@my_decorator
def my_function():
    print("Binnen my_function")

my_function()

Aanroepen zonder het @-symbool:

# zelfde definitie van my_decorator als hierboven
def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("Voor de functie wordt aangeroepen")
        result = func(*args, **kwargs)
        print("Na de functieaanroep")
        return result
    return wrapper

def my_function():
    print("Binnen my_function")

# Expliciet de decorator toepassen
my_function = my_decorator(my_function)

my_function()

In beide gevallen is het resultaat hetzelfde. De aanroep my_decorator(my_function) geeft de functie wrapper terug, die vervolgens wordt toegewezen aan de variabele my_function, waardoor de originele functie wordt vervangen. De syntax met @ is slechts syntactische suiker voor deze toewijzingsbewerking.