#python #naukaprogramowania #klasy mam takie dośc proste pythanie . mamy podstawową klasę pojazd która ma atrybuty nazwa i prędkość . oprócz tego chciałbym zrobić 3 klasy dziedziczące po klasie pojazd: osobowy/motor/dostawczy , które każda oddzielnie bedzie miała swoje własne atrybuty, o które automatycznie poprosi użytkownika podczas inicjalizowania. Założmy ze będzie to dla podanego przykładu:
osobowy : ilu drzwiowy
motor : jakie manetki
dostawczy: ile palet sie zmiesci
jak to najlepiej zainicjalizowac ? stworzyć dodatkowe inity dla każdej z klas dziedziczących ? czy w w kązdym z initów musi być super init ? oczywiście założenie jest żeby kod był w miare czytelny i potwarzać jak najmniej linijek kodu ?
ktoś spotkał się z podobnym przypadkiem ? dziękuję
paste bin : https://pastebin.com/nAq3jZKh
osobowy : ilu drzwiowy
motor : jakie manetki
dostawczy: ile palet sie zmiesci
jak to najlepiej zainicjalizowac ? stworzyć dodatkowe inity dla każdej z klas dziedziczących ? czy w w kązdym z initów musi być super init ? oczywiście założenie jest żeby kod był w miare czytelny i potwarzać jak najmniej linijek kodu ?
ktoś spotkał się z podobnym przypadkiem ? dziękuję
paste bin : https://pastebin.com/nAq3jZKh

- Najlepsze
- Wszystkie komentarze







tam gdzie pobierasz
int(input(to ta linijka też powinna być wtrydziedziczenie:
każdy
__init__(self, dodatkowy_atrybut, dodatkowy_atr2, *args, **kwargs)w klasach dziedziczących ma mieć w pierwszej linijcesuper().__init__(*args, **kwargs). Używaj keyword argumentów, a nawet keyword-only argumentów.ogólnie moim założeniem było: robię obiekt klasy motor/osobowy/dostawczy .
klasy te dziedziczą po klasie pojazd.
pojazd inicializuje się 3 argumentami ( Nazwa, predkośc, typPaliwa) i dodatkowo w zaleznosci jaką klasę się wybrało:
jesli wybrało się np. motor to chciałbym, zeby program automatycznie dodatkowo zapytał : "Prosze podać rodzaj manetek" . i wtedy użytkownik wpisuje z klawiatury
@JungleJamPL
init_ to specjalana metoda (inicjalizator). Jeśli chcesz zmienić jej zachowanie w klasie potomnej, musisz ją nadpisać (override). Jeśli chcesz zachować funkcjonalność rodzica, to po nadpisaniu w klasie potomnej musisz odwołać się do niej poprzez 'super' (i w Twoim przypadku przekazać 'nawa' i 'predkosc').
pastebin: https://pastebin.com/DSmh8jKm
@JungleJamPL: *args i **kwargs to magiczny syntax znaczący: wszystkie przekazane wartości, których nie udało się przypisać do nazwanych parametrów funkcji, wrzuć kolejno albo do zmiennej args (pozycyjne, list) albo do kwargs (argumenty nazwane, dict)
żeby mieć możliwość przekazać je do
super().__init__musisz je zapisać jako argumenty tego inita (tutaj - linijkę nad wywołaniem supera, w sygnaturze init_ musisz je jawnie wymienić