
Autor: 14.11.2023
Python - dekoratory
W tym artykule wyjaśnimy, czym są dekoratory w języku Python oraz jaką funkcję pełnią. Rozpoczniemy od objaśnienia definicji dekoratora, a następnie przejdziemy do prostego przykładu. Do zrozumienia artykułu potrzebujesz podstawowej wiedzy na temat języka Python.
Python - programowanie funkcyjne
Poznaj techniki programowania funkcyjnego w Python - twórz czytelny, zrozumiały i łatwy do testowania kod. Dzięki funkcyjnemu podejściu możesz tworzyć kod, który ma mniej błędów, jest łatwiejszy do testowania i łatwiejszy w utrzymaniu. Dowiedz się więcej
Co to jest dekorator
Dekorator w Pythonie to specjalna funkcja, która "owija" inną funkcję lub metodę i pozwala zmodyfikować jej zachowanie bez zmiany samego ciała funkcji. Można to sobie wyobrazić jak dodanie dodatkowej warstwy (dekoracji) do istniejącej funkcji.
Przykład
Spójrz na prosty przykład dekoratora:
def my_decorator(func):
def wrapper():
print("Before func.")
func()
print("After func.")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello()
Rezultat działania skryptu jest następujący:
Before func.
Hello!
After func.
Opis działania skryptu:
- Definiujemy funkcję my_decorator(). Funkcja ta przyjmuje inną funkcję func jako argument.
- Wewnątrz my_decorator(), definiujemy inną funkcję - wrapper(). Funkcja wrapper() będzie “opakowywać” funkcję func().
- wrapper() najpierw wykonuje pewien kod przed wywołaniem oryginalnej funkcji func(), w tym przypadku drukuje tekst przed wywołaniem.
- Następnie wrapper() wywołuje func(), czyli oryginalną funkcję, którą chcemy udekorować.
- Po wywołaniu func(), wrapper() wykonuje jeszcze kod, drukuje tekst po wywołaniu funkcji.
- my_decorator() zwraca wrapper() jako wynik. Teraz wrapper() jest “dekoracją” dla naszej oryginalnej funkcji.
- Dekorujemy funkcjęsay_hello()za pomocą my_decorator(). Robimy to, używając symbolu @ przed definicją funkcji say_hello().
- Wywołując say_hello(), faktycznie wywołujemy wrapper(), który dodaje dodatkowe zachowanie przed i po wywołaniu say_hello().
Python - programowanie funkcyjne
Poznaj techniki programowania funkcyjnego w Python - twórz czytelny, zrozumiały i łatwy do testowania kod. Dzięki funkcyjnemu podejściu możesz tworzyć kod, który ma mniej błędów, jest łatwiejszy do testowania i łatwiejszy w utrzymaniu. Dowiedz się więcej
Dekoratory są bardzo potężnym narzędziem w Pythonie, pozwalającym na elastyczne modyfikowanie funkcji, ponieważ pozwalają one na dodawanie funkcjonalności do istniejących funkcji "z zewnątrz", nie zmieniając ich wewnętrznej implementacji.