


Zrozumienie dekoratorów w Pythonie
Dekoratory to wzorzec projektowy, który pozwala modyfikować lub rozszerzać zachowanie obiektu bez zmiany oryginalnej implementacji obiektu. Innymi słowy, dekoratory pozwalają na dodanie nowej funkcjonalności do istniejącego obiektu bez modyfikowania jego podstawowego kodu.…
Dekorator to zazwyczaj funkcja, która przyjmuje obiekt jako argument i zwraca nowy obiekt, który „opakuje” oryginalny obiekt. Nowy obiekt ma te same metody i atrybuty, co obiekt oryginalny, ale ma także dodatkową funkcjonalność lub zachowanie zapewnione przez dekorator.
Załóżmy na przykład, że masz klasę o nazwie „Samochód”, która ma metodę zwaną „drive” ()`, który sprawia, że samochód się porusza. Można utworzyć dekorator o nazwie `SpeedLimitDecorator`, który modyfikuje metodę `drive()` w celu ograniczenia prędkości samochodu. `SpeedLimitDecorator` przyjmie oryginalny obiekt `Car` jako argument i zwróci nowy obiekt `Car`, który ma te same metody i atrybuty co oryginalny `Car`, ale z dodatkową funkcjonalnością ograniczania prędkości.
Tutaj jest przykład użycia dekoratora w Pythonie:
```
class Car:
def drive(self):
print("Samochód prowadzi")
class SpeedLimitDecorator:
def __init__(self, car):
self. car = car
def drive(self):
self.car.drive()
print("Prędkość samochodu jest teraz ograniczona do 50 mil na godzinę")
car = Car()
speed_limited_car = SpeedLimitDecorator(car)
speed_limited_car.drive() # wydruków „Samochód jedzie” i „Samochód jest teraz ograniczony do 50 mil na godzinę”
```
W tym przykładzie klasa `SpeedLimitDecorator` przyjmuje obiekt `Car` jako argument w swoim konstruktorze, a następnie modyfikuje wartość `drive( )` metody oryginalnego obiektu `Car`, aby ograniczyć jego prędkość. Klasa `SpeedLimitDecorator` ma również własną metodę `drive()`, która wywołuje oryginalną metodę `drive()` owiniętego obiektu, ale z dodatkowym ograniczeniem do 50 mil na godzinę.
Decorators to potężne narzędzie do modyfikowania lub rozszerzania istniejących obiektów bez zmiany ich pierwotnej implementacji. Można ich używać do dodawania nowych funkcjonalności, modyfikowania zachowania, a nawet zastępowania części implementacji obiektu bez wpływu na resztę kodu.



