Sobes.tech
Junior

Hogyan lehet meghívni egy dekorátort @ szimbólum használata nélkül?

sobes.tech MI

Válasz az MI-től

Egy dekorátor egy olyan függvény, amely egy másik függvényt argumentumként fogad, és általában kibővíti az eredeti funkcionalitását egy új függvény visszaadásával. Dekorátor hívható @ szimbólum nélkül is, ha kifejezetten alkalmazzuk a dekorátort az eredeti függvényre, és az eredményt ugyanarra vagy egy új változóra rendeljük.

Példa: az my_function függvény dekorálása az my_decorator dekorátorral.

@ szintaxis használata:

# my_decorator definíciója
def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("A függvény hívása előtt")
        result = func(*args, **kwargs)
        print("A függvény hívása után")
        return result
    return wrapper

@my_decorator
def my_function():
    print("my_function belsejében")

my_function()

Dekorátor hívása @ nélkül:

# ugyanaz a my_decorator definíció, mint fent
def my_decorator(func):
    def wrapper(*args, **kwargs):
        print("A függvény hívása előtt")
        result = func(*args, **kwargs)
        print("A függvény hívása után")
        return result
    return wrapper

def my_function():
    print("my_function belsejében")

# Kifejezett dekorátor alkalmazása
my_function = my_decorator(my_function)

my_function()

Mindkét esetben az eredmény ugyanaz lesz. A my_decorator(my_function) hívás visszaadja a wrapper függvényt, amelyet aztán hozzárendelünk a my_function változóhoz, helyettesítve az eredeti függvényt. A @ szintaxis csak szintaktikus cukor ehhez az hozzárendelési művelethez.