Zliczanie instancji klasy
Treść zadania
Zaprojektuj klasę MojaKlasa, która sama zlicza, ile jej obiektów (instancji) utworzono:
- atrybut klasy (wspólny dla wszystkich obiektów)
_licznik, początkowo równy 0 — podkreślenie na początku nazwy oznacza, że jest to pole „prywatne”, którego nie należy zmieniać spoza klasy, - konstruktor zwiększa licznik o 1 i zapisuje w atrybucie obiektu
numernumer nowego obiektu (pierwszy utworzony obiekt ma numer 1), - metoda statyczna
liczba_instancji()zwraca liczbę dotychczas utworzonych obiektów.
Program wykonuje polecenia:
nowy— tworzy nowy obiektMojaKlasai wypisujeUtworzono obiekt nr <numer>.ile— wypisujeLiczba utworzonych instancji: <liczba>
Dane wejściowe
- 1. linia: liczba poleceń $n$
- kolejne $n$ linii: polecenie
nowyalboile
Dane wyjściowe
Po jednej linii dla każdego polecenia, w formacie opisanym w treści.
Ograniczenia
- $1 \le n \le 100$
Uwagi
- Do atrybutu klasy odwołuj się przez nazwę klasy:
MojaKlasa._licznik. Zapisself._licznik += 1utworzyłby osobny atrybut w każdym obiekcie i licznik nie byłby wspólny.
Przykład
5 nowy nowy ile nowy ile
Utworzono obiekt nr 1. Utworzono obiekt nr 2. Liczba utworzonych instancji: 2 Utworzono obiekt nr 3. Liczba utworzonych instancji: 3
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 18
Zadania w tym rozdziale uczą projektowania klas: konstruktora __init__, atrybutów, metod, metod statycznych (@staticmethod) oraz metod specjalnych, dzięki którym obiekty można wypisywać (__str__), porównywać (__eq__) i łączyć operatorami (__add__, __sub__, __mul__, …). Ostatnie zadania wprowadzają też wyjątki (raise, try/except), klasy danych (@dataclass) i generatory (yield).
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 szkieletem klasy, a zwykle także z gotowym wczytywaniem danych i wypisywaniem wyników. Twoim zadaniem jest przede wszystkim uzupełnienie metod klasy — wynik programu zależy od tego, jak działa Twoja klasa.
- 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,Prostokat. - „Z dokładnością do 2 miejsc po przecinku” oznacza dokładnie dwie cyfry po kropce, np.
f"{x:.2f}"(3.00,-0.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 ile
Liczba utworzonych instancji: 0
Test 2
Nie uruchomiono1 nowy
Utworzono obiekt nr 1.
Test 3
Nie uruchomiono4 nowy nowy nowy ile
Utworzono obiekt nr 1. Utworzono obiekt nr 2. Utworzono obiekt nr 3. Liczba utworzonych instancji: 3
Test 4
Nie uruchomiono6 ile nowy ile nowy nowy ile
Liczba utworzonych instancji: 0 Utworzono obiekt nr 1. Liczba utworzonych instancji: 1 Utworzono obiekt nr 2. Utworzono obiekt nr 3. Liczba utworzonych instancji: 3
Test 5
Nie uruchomiono3 nowy ile ile
Utworzono obiekt nr 1. Liczba utworzonych instancji: 1 Liczba utworzonych instancji: 1