Wywołanie metody klasy bazowej w klasie potomnej
Treść zadania
Zaprojektuj dwie klasy:
Bazowa— konstruktor__init__(self, nazwa)zapamiętuje nazwę obiektu, a metodaprzedstaw_sie()wypisuje linięJestem klasą bazową. Nazywam się <nazwa>.Potomna— dziedziczy poBazowai nadpisuje metodęprzedstaw_sie(). Nowa wersja:- najpierw wywołuje wersję metody z klasy bazowej (przez
super()), - potem wypisuje linię
A ja jestem klasą potomną.
- najpierw wywołuje wersję metody z klasy bazowej (przez
Klasa Potomna nie potrzebuje własnego konstruktora — dziedziczy go po Bazowa.
Program wczytuje opis kilku obiektów, tworzy je, a następnie dla każdego z nich (w kolejności z wejścia) wywołuje metodę przedstaw_sie().
Dane wejściowe
- 1. linia: liczba obiektów $n$
- kolejne $n$ linii: rodzaj obiektu (
bazowaalbopotomna) i jego nazwa (jedno słowo), oddzielone spacją
Dane wyjściowe
Komunikaty wypisane przez kolejne wywołania przedstaw_sie(): jedna linia dla obiektu klasy Bazowa i dwie linie dla obiektu klasy Potomna.
Ograniczenia
- $1 \le n \le 20$
Przykład
3 bazowa Ala potomna Ola bazowa Jan
Jestem klasą bazową. Nazywam się Ala. Jestem klasą bazową. Nazywam się Ola. A ja jestem klasą potomną. Jestem klasą bazową. Nazywam się Jan.
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 potomna Tomek
Jestem klasą bazową. Nazywam się Tomek. A ja jestem klasą potomną.
Test 2
Nie uruchomiono1 bazowa Zosia
Jestem klasą bazową. Nazywam się Zosia.
Test 3
Nie uruchomiono2 potomna Kuba potomna Basia
Jestem klasą bazową. Nazywam się Kuba. A ja jestem klasą potomną. Jestem klasą bazową. Nazywam się Basia. A ja jestem klasą potomną.
Test 4
Nie uruchomiono4 bazowa X bazowa Y potomna Z bazowa W
Jestem klasą bazową. Nazywam się X. Jestem klasą bazową. Nazywam się Y. Jestem klasą bazową. Nazywam się Z. A ja jestem klasą potomną. Jestem klasą bazową. Nazywam się W.