Aktywne Wpisy

OperatorHydrolokator +476
źródło: 20240206_204100
Pobierz
Iudex +186
Widzicie ten tramwaj w oddali? Szkoda, że musi czekać zanim przejadą samochody. Gdyby tylko było tu dla nich miejsce i istniał jakiś sposób żeby tramwaj nie musiał czekać...
#wroclaw #mpkwroclaw
#wroclaw #mpkwroclaw
źródło: temp_file8873881138732355495
Pobierz




class Parent():
@abstractmethod
def jedzzupe( ):
pass
class Child1(Parent)
def jedzzupe( Parent) :
# jem zupe pomidorowa
class Child2()
def jedzzupe():
# jem zupe ogorkowa
chciałbym teraz zeby wewnątrz metody "jedzzupe" wykonał się jeden wspólny krok np. "zamieszaj"
niestety metoda jedzzupe jest w kilku miejscach i musialbym po prostu robić copy-paste zeby dodać ten jeden krok więcej.
Najlepiej jakby ten wspólny krok "zamieszaj" dało się wrzucić do abstrakcyjnej metody i wtedy z automatu reszta by odziedziczyla "zamieszaj" + dodali swoją wersję jedzenia zupy.
Jak to poukładać?
#python #programowanie
def zamieszaj():
# ta wspólna logika
def jedzzupe(obj: Parent):
zamieszaj(obj)
obj.jedzzupe()
Tym sposobem masz ładną funcję do używania wszędzie w kodzie, możesz zaimplementować interfejs jak trzeba, a wspólny krok "zamieszaj" się wykona bez robienia super() w każdej implementacji "jedz_zupe".
Btw, pisz kod po
Parent.jedz_zupe()lubsuper().jedz_zupe()Dekorator też brzmi bardzo fajnie, ale wciąż trzeba wszędzie to podawać
Ja to bym sobie stworzy executora w stylu "mieszaj i jedz zupę", do niego przekazywał obiekt pochodny po Parent i tam zaimplementował mieszanie + wywołanie jedz_zupe - dzięki temu wspólna
@FantaZy: jeszcze jedno mi przyszło do głowy - zrobić funkcje w Parent jedzzupe, która miesza w pierwszej linijce a w drugiej wola metodę terazjedz_zupe która kolejne klasy nadpisują - ale tak z punktu widzenia czystego kodu to kiepskie rozwiązanie xD ale może wystarczy
self.zamieszaj() i dziala.
dekorator musze dodac we wszystkich miejscach gdzie mam metode 'jedzzupe'.... tak samo jak w innym wypadku musze dodać wywołanie 'zamieszaj' ...
koniec koncow po prostu wszedzie wstawie ten sam kod z 'zamieszaj' i tyle.
projekt juz istniejący wiec wszystkie Childy i jedzzupe juz są i ciężko cośz nimi zrobić.
pass. Lepiej wrzucićraise NotImplementedError. W sumie dekorator już to robi, ale dobrze być świadomym tego.@abstractmethoddef foo(self):
____return