Wywołanie metody klasy bazowej w klasie potomnej

Zadanie 1 z 7 · rozdział 19Trudność: 1 z 3dziedziczenieoverridesuper

Treść zadania

Zaprojektuj dwie klasy:

  1. Bazowa — konstruktor __init__(self, nazwa) zapamiętuje nazwę obiektu, a metoda przedstaw_sie() wypisuje linię
    Jestem klasą bazową. Nazywam się <nazwa>.
  2. Potomna — dziedziczy po Bazowa i nadpisuje metodę przedstaw_sie(). Nowa wersja:
    • najpierw wywołuje wersję metody z klasy bazowej (przez super()),
    • potem wypisuje linię A ja jestem klasą potomną.

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 (bazowa albo potomna) 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

Wejście
3
bazowa Ala
potomna Ola
bazowa Jan
Wyjście
Jestem klasą bazową. Nazywam się Ala.
Jestem klasą bazową. Nazywam się Ola.
A ja jestem klasą potomną.
Jestem klasą bazową. Nazywam się Jan.
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.

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 uruchomiono
Wejście
1
potomna Tomek
Oczekiwane wyjście
Jestem klasą bazową. Nazywam się Tomek.
A ja jestem klasą potomną.

Test 2

Nie uruchomiono
Wejście
1
bazowa Zosia
Oczekiwane wyjście
Jestem klasą bazową. Nazywam się Zosia.

Test 3

Nie uruchomiono
Wejście
2
potomna Kuba
potomna Basia
Oczekiwane wyjście
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 uruchomiono
Wejście
4
bazowa X
bazowa Y
potomna Z
bazowa W
Oczekiwane wyjście
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.
Uruchom z własnymi danymi