Jak działa łańcuchowanie dekoratorów w Pythonie?

Dekoratory w Pythonie to potężne narzędzie, pozwalające programistom modyfikować zachowanie funkcji lub metod bez zmieniania ich kodu. Łańcuchowanie dekoratorów pozwala na stosowanie wielu dekoratorów do jednej funkcji, co zwiększa elastyczność i możliwości reużywalności kodu. W tym artykule przyjrzymy się, jak działa łańcuchowanie dekoratorów i przedstawimy przykład użycia tej techniki.

Kompletny przykład kodu z komentarzami

Zacznijmy od przygotowania dwóch prostych dekoratorów, które zmieniają sposób działania funkcji poprzez dodanie dodatkowego tekstu przed i po jej wywołaniu.

def decorator_outer(func):
    # Dekorator zewnętrzny dodający tekst przed
    def wrapper():
        print("Tekst przed wykonaniem funkcji")
        func()
        print("Tekst po wykonaniu funkcji")
    return wrapper

def decorator_inner(func):
    # Dekorator wewnętrzny dodający inny tekst
    def wrapper():
        print("Rozpoczynam działanie funkcji")
        func()
        print("Zakończyłem działanie funkcji")
    return wrapper

@decorator_outer
@decorator_inner
def greet():
    # Funkcja, do której stosujemy dekoratory
    print("Witaj, świecie!")

greet()

W powyższym kodzie zdefiniowaliśmy dwie funkcje dekorujące: decorator_outer i decorator_inner. Następnie zastosowaliśmy je jako dekoratory do funkcji greet poprzez umieszczenie przed nią dwóch instrukcji @decorator_name. Kolejność dekoratorów jest istotna – dekorator umieszczony bliżej nazwy funkcji (w tym przypadku @decorator_inner) zostanie wykonany jako pierwszy.

Jak to działa?

Dekoratory działają przez otoczenie oryginalnej funkcji nową funkcją (wrapperem), co pozwala na wykonanie dodatkowego kodu przed i po wywołaniu oryginalnej funkcji. W naszym przykładzie, kiedy wywołujemy greet(), najpierw uruchamiany jest kod z decorator_inner, a następnie decorator_outer. Pozwala to na eleganckie dodanie przed i po wykonaniu funkcji greet dodatkowych instrukcji bez ingerencji w jej kod.

Podsumowanie

Łańcuchowanie dekoratorów w Pythonie umożliwia efektywne rozszerzanie funkcjonalności funkcji lub metod. Przez stosowanie wielu dekoratorów, programiści mogą tworzyć bardziej złożone zachowania w sposób modularny i reużywalny. Warto jednak pamiętać, że nadmiarne używanie tej techniki może uczynić kod trudniejszym do zrozumienia, dlatego zaleca się stosowanie dekoratorów tam, gdzie naprawdę poprawiają one klarowność i jakość kodu.

Jeżeli chcesz przyśpieszyć swoją naukę tworzenia stron chciałbym polecić mój kurs Python od podstaw w którym nauczysz się tego języka od podstaw do zaawansowanych jego aspektów.

Scroll to Top