Polimorfizm: Zwierz, Pies i Kot
Treść zadania
Zaprojektuj klasy:
Zwierz— konstruktor__init__(self, imie)zapamiętuje imię zwierzęcia. Metodaodglos()zwraca napis...(ogólny, nieokreślony dźwięk). Metodaprzedstaw_sie()wypisuje linię:`
<NazwaKlasy> <imię> wydaje odgłos: <odgłos>`
gdzie<NazwaKlasy>to nazwa klasy obiektu (Zwierz,PiesalboKot), a<odgłos>to wynik metodyodglos().Pies— dziedziczy poZwierzi nadpisujeodglos(), która zwracaHau!.Kot— dziedziczy poZwierzi nadpisujeodglos(), która zwracaMiau!.
Klasy Pies i Kot nie definiują własnej metody przedstaw_sie() — korzystają z odziedziczonej. Dzięki polimorfizmowi wywołanie self.odglos() wewnątrz przedstaw_sie() uruchomi wersję metody właściwą dla klasy obiektu.
Program wczytuje listę zwierząt, umieszcza je w jednej liście i dla każdego (w kolejności z wejścia) wywołuje przedstaw_sie().
Dane wejściowe
- 1. linia: liczba zwierząt $n$
- kolejne $n$ linii: rodzaj zwierzęcia (
zwierz,piesalbokot) i jego imię (jedno słowo), oddzielone spacją
Dane wyjściowe
$n$ linii — po jednej dla każdego zwierzęcia, w formacie podanym w treści.
Ograniczenia
- $1 \le n \le 20$
Uwagi
- Nazwę klasy obiektu można odczytać wyrażeniem
type(self).__name__.
Przykład
3 zwierz Gucio pies Burek kot Mruczek
Zwierz Gucio wydaje odgłos: ... Pies Burek wydaje odgłos: Hau! Kot Mruczek wydaje odgłos: Miau!
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 19
Zadania w tym rozdziale uczą dziedziczenia: klasa potomna przejmuje atrybuty i metody klasy bazowej, może je nadpisać (override) albo rozszerzyć, wywołując wersję z klasy bazowej przez super(). Dzięki polimorfizmowi ten sam kod (np. pętla po liście obiektów) wywołuje metodę odpowiednią dla konkretnej klasy obiektu. Dziedziczenie przydaje się też przy wyjątkach: własne wyjątki to klasy dziedziczące po Exception, które można układać w hierarchie.
Konwencje wspólne:
- Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
- W każdym zadaniu dostajesz kod startowy ze szkieletami klas i gotowym wczytywaniem danych. Twoim zadaniem jest uzupełnienie klas — wynik programu zależy od tego, jak działają Twoje klasy.
- Nazwy klas i metod podane w treści są obowiązkowe (kod startowy z nich korzysta). Nazwy w kodzie piszemy bez polskich znaków, np.
Kolo,Czlowiek. - „Z dokładnością do 2 miejsc po przecinku” oznacza dokładnie dwie cyfry po kropce, np.
f"{x:.2f}"(3.00,4.50). - Program nie wypisuje komunikatów typu „Podaj liczbę:”.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomiono1 kot Filemon
Kot Filemon wydaje odgłos: Miau!
Test 2
Nie uruchomiono1 zwierz Nemo
Zwierz Nemo wydaje odgłos: ...
Test 3
Nie uruchomiono4 pies Azor pies Reksio kot Tom zwierz Gucio
Pies Azor wydaje odgłos: Hau! Pies Reksio wydaje odgłos: Hau! Kot Tom wydaje odgłos: Miau! Zwierz Gucio wydaje odgłos: ...
Test 4
Nie uruchomiono3 kot Bonifacy pies Szarik kot Garfield
Kot Bonifacy wydaje odgłos: Miau! Pies Szarik wydaje odgłos: Hau! Kot Garfield wydaje odgłos: Miau!