🥕📝 Zadania cz. 1
Przygotowanie repozytorium
Zanim zaczniesz pracę, zsynchronizuj swoje lokalne repozytorium z najnowszymi zmianami:
- Wejdź do swojego zdalnego repozytorium.
- Odszukaj pull request i zaakceptuj go (merge do gałęzi
main). - Wróć do lokalnego repozytorium i zaktualizuj gałąź
main:git checkout main git pull - Na zaktualizowanej gałęzi
mainstwórz swoją gałąź roboczą na te zajęcia:git checkout -b zaj03
Od teraz pracuj na gałęzi zaj03.
Przykład
Wejdź do repozytorium, zapoznaj się z gotowym kodem w pliku main_zaj03.py oraz modułami w folderze python1course/zaj03.
Zwróć uwagę na:
- Tworzenie konstruktorów -
__init__, - Dodawanie metod,
- Tekstową reprezentację klas -
__str__oraz__repr__(jako przykład przeciążania operatorów), - Atrybut klasy
__instances_count- współdzielony przez wszystkie instancje, zlicza utworzone karetki (patrz: Atrybuty klasy vs instancji), - Użycie
isinstance()w metodzie__eq__- sprawdza, czy drugi operand jest w ogóle instancjąAmbulanceprzed porównaniem (patrz: Introspekcja), - Właściwość
statuszdefiniowaną przez@property- setter waliduje dozwolone wartości i rzucaValueErrordla nieprawidłowych (patrz: Metody -@property).
📝 Zadania
Zaimplementuj dwie klasy w module personnel: Employee oraz Driver. Stwórz odpowiednie pliki w katalogu python1course/zaj03/personnel/.
Klasa Employee
Utwórz klasę Employee w pliku employee.py z następującymi wymaganiami:
- Konstruktor (
__init__): Powinien przyjmować następujące parametry: first_name(str) - imię pracownikalast_name(str) - nazwisko pracownikaemployee_id(int) - unikalny identyfikator pracownika-
salary(float) - wynagrodzenie pracownika -
Metody:
display_info()- powinna wyświetlać informacje o pracowniku w formacie:Employee ID: {employee_id}, Name: {first_name} {last_name}, Salary: {salary} zł-
update_salary(new_salary)- powinna aktualizować wynagrodzenie pracownika i wyświetlać komunikat:Updated salary: {new_salary} -
Metody specjalne:
__str__()- powinna zwracać czytelną reprezentację tekstową obiektu w formacie:Employee({first_name} {last_name}, ID: {employee_id})__repr__()- powinna zwracać jednoznaczną reprezentację obiektu w formacie:Employee('{first_name}', '{last_name}', {employee_id}, {salary})
Klasa Driver
Utwórz klasę Driver w pliku driver.py, która dziedziczy po klasie Employee. Klasa powinna spełniać następujące wymagania:
- Konstruktor (
__init__): Powinien przyjmować wszystkie parametry z klasyEmployeeoraz dodatkowo: license_number(str) - numer licencji kierowcy-
qualifications(list) - lista kwalifikacji kierowcy (lista stringów) -
Wykorzystanie dziedziczenia: W konstruktorze wywołaj konstruktor klasy bazowej
Employee, używając jednej z poniższych metod:# Metoda 1: bezpośrednie wywołanie Employee.__init__(self, first_name, last_name, employee_id, salary) # Metoda 2: używając super() (zalecane) super().__init__(first_name, last_name, employee_id, salary) -
Przeciążenie metody
display_info(): Nadpisz metodędisplay_info()z klasy bazowej tak, aby zwracała string (zamiast wyświetlać) w formacie:gdzieDriver ID: {employee_id}, Name: {first_name} {last_name}, Salary: {salary}, License Number: {license_number}, Qualifications: {qualifications_joined}qualifications_joinedto kwalifikacje połączone przecinkiem (np.', '.join(self.qualifications)). -
Metody specjalne:
__str__()- powinna zwracać czytelną reprezentację tekstową obiektu w formacie:Driver({first_name} {last_name}, ID: {employee_id}, License: {license_number})__repr__()- powinna zwracać jednoznaczną reprezentację obiektu w formacie:Driver('{first_name}', '{last_name}', {employee_id}, {salary}, '{license_number}', {qualifications})
Plik __init__.py
Zaktualizuj plik __init__.py w katalogu personnel/, aby eksportował obie klasy:
from .employee import Employee
from .driver import Driver
__all__ = ["Employee", "Driver"]
Przykładowe użycie
Po zaimplementowaniu klas i odkomentowaniu kodu w main_zaj03.py, plik ten powinien się uruchamiać bez błędów. Można też dodać swój kod, żeby zaprezentować działanie poszczególnych funkcjonalności.
Uwagi
- Zwróć uwagę na poprawną inicjalizację klasy bazowej w konstruktorze klasy pochodnej.
- Upewnij się, że metoda
display_info()w klasieEmployeewyświetla informacje (print()), a w klasieDriverzwraca string. - Zaimplementuj zarówno
__str__()jak i__repr__()dla obu klas zgodnie z podanymi formatami.