1. Dekoratory

1.1. Cel

Dekoratory pozwalają rozszerzyć funkcjonalność funkcji lub klasy. Dektoratory są funkcjami które “opakowują” inne funkcje lub klasy.

1.2. Przypadki użycia

  • Pamięć podręczna - (Cache),

  • Sprawdzanie argumentów,

  • Logowanie,

  • Rejestracja,

  • Weryfikacja

1.3. Definicja

def decorator_function(origin_function):
    def wraper_function():
        print('przed funkcją o nazwie {}'.format(origin_function.__name__))
        return origin_function()
    return wraper_function

@decorator_function
def main_function():
    print('główna funkcja')

main_function()
przed funkcją o nazwie main_function
główna funkcja

1.4. Definicja gdy funkcja ma parametry (*args / **kwargs)

def decorator_function(origin_function):
    def wraper_function(*args, **kwargs):
        print('przed funkcją o nazwie {}'.format(origin_function.__name__))
        return origin_function(*args, **kwargs)
    return wraper_function


@decorator_function
def hello_function(imie, nazwisko):
    print('Czesc jestem {} {}'.format(imie, nazwisko))

hello_function("Adam", "Nowak")
przed funkcją o nazwie hello_function
Czesc jestem Adam Nowak

1.5. Sparametryzowany dekorator

1.6. Przykład

Note

hasattr opisane jest w Include/abstract.h

Note

hasattr zaimplementowane jest w Objects/object.c

1.7. Użycie

Tip

podejrzyj plik manage.py np. poprzez polecenie cat manage.py można tam znaleźć w jaki sposób django jest uruchamiane

zmień ustawienia w settings.py

Hint

można to zrobić np. poprzez uruchomienie vim servermonitoring/settings.py

albo bezpośredni w pyCharm

1.8. Zadania

1.8.1. Zero