Co to są dekoratory w Pythonie?

Dekoratory w Pythonie to potężne i przydatne narzędzie, które pozwala modyfikować działanie funkcji lub metod bez zmieniania ich kodu źródłowego. W istocie, dekoratory to funkcje, które przyjmują inną funkcję jako argument i zwracają nową funkcję, dodając do niej pewne funkcjonalności. Dzięki temu mechanizmowi programiści mogą łatwo rozszerzać i modyfikować zachowanie funkcji w sposób czysty i czytelny.

Przykład użycia dekoratora

Zanim zagłębimy się w techniczne szczegóły, spójrzmy na prosty przykład dekoratora, który mierzy czas wykonania funkcji:

import time

# Dekorator do mierzenia czasu wykonania funkcji
def timer(func):
    # Funkcja opakowująca, dodająca dodatkowe zachowanie
    def wrapper(*args, **kwargs):
        start_time = time.time()  # Zapisz czas startu
        result = func(*args, **kwargs)  # Wywołanie oryginalnej funkcji
        end_time = time.time()  # Zapisz czas końca
        print(f"Czas wykonania funkcji {func.__name__}: {end_time - start_time}s")
        return result
    return wrapper

# Przykład użycia dekoratora
@timer
def example_function(seconds):
    """Funkcja symulująca dłuższe obliczenia"""
    time.sleep(seconds)

# Wywołanie funkcji z dekoratorem
example_function(1)

W tym przykładzie dekorator @timer jest używany do zmierzenia i wyświetlenia czasu wykonania funkcji example_function. Dekorator timer opakowuje oryginalną funkcję example_function w funkcję wrapper, która dodaje logikę mierzenia czasu przed i po wywołaniu oryginalnej funkcji.

Jak działają dekoratory?

Kluczem do zrozumienia dekoratorów jest pojęcie funkcji wyższego rzędu – funkcji, która przyjmuje inną funkcję jako argument lub zwraca inną funkcję jako wynik. Dekorator przyjmuje funkcję do ozdobienia i zwraca nową funkcję z rozszerzoną funkcjonalnością.

W Pythonie funkcje są obiektami pierwszej klasy, co oznacza, że można je przekazywać jako argumenty do innych funkcji, przypisywać do zmiennych, definiować wewnątrz innych funkcji i zwracać jako wartości z funkcji.

Zalety użycia dekoratorów

  1. Zwiększenie czytelności i uproszczenie kodu: Dekoratory pozwalają na oddzielenie logiki dodatkowej od głównej logiki funkcji, co sprawia, że kod jest bardziej modularny i łatwiejszy do zrozumienia.
  2. Wznowienie użycia kodu: Dekoratory umożliwiają łatwe ponowne użycie kodu, ponieważ można je stosować do wielu funkcji bez konieczności duplikowania kodu.
  3. Rozszerzalność: Dekoratory pozwalają na rozszerzanie istniejących funkcji bez modyfikacji ich kodu źródłowego, co jest szczególnie przydatne w przypadku korzystania z kodu, nad którym nie mamy kontroli.

Podsumowanie

Dekoratory w Pythonie to potężne narzędzie, które pozwala na eleganckie dodawanie funkcjonalności do istniejących funkcji i metod. Umożliwiają one czyste i efektywne zarządzanie kodem, ułatwiają ponowne użycie kodu i pomagają w utrzymaniu jego czytelności. Dekoratory znajdują zastosowanie w wielu różnych scenariuszach, takich jak logowanie, mierzenie wydajności, kontrole dostępu, cachowanie i wiele innych.

 

 

Scroll to Top