Dekorator - jak działa?

0

Ogarniam sobie podstawy dekoratorów i w przykładzie w poradniku jest cos takiego:

def decorator_fun(original_fun):
   def wrapper_fun():
      print("To sie wykona przed original")
      return original_fun()
   return wrapper_fun

@decorator_fun
def display():
   print("funkcja original")

display()

i tak... z tego co rozumiem to za pomocą dekoratora możemy zmienić działanie funkcji bez jej bezpośredniej edycji,tak? Jednak nie rozumiem po co w tym przykładzie wrapper_fun()? Tzn czemu nie jest tak:

def decorator_fun(original_fun):
   print("To sie wykona przed original")
   return original_fun()

@decorator_fun
def display():
   print("funkcja original")

display()

Dzieki za każdą odp.

1

To co Napisałęś w drugim listingu się nie kompiluje, wyświetla napisy, ale funkcja display nie istnieje (Zastąpiłes ją dekoratorem). W pierwszym, właśnie, ją "Dekorujesz".

1
@decorator_fun
def display():
   print("funkcja original")

Funkcja jest obiektem w Pythonie.
Funkcja display jako obiekt, zostanie zastąpiona tym co zwróci decorator_fun.
Możesz powyższy przykład zastąpić odpowiednim zapisem, który jest równoznaczny czyli:

def decorator(...):
     ....

def display():
     ....

display = decorator(display)

W momencie dekoracji interpreter zastąpi funkcję display, na to, co zostało zwrócone przez decorator.

1 użytkowników online, w tym zalogowanych: 0, gości: 1