Języki programowania dzielimy nie tylko ze względu na typowanie (słabe/silne, statyczne/dynamiczne). Dzielimy je także ze względu na paradygmaty – wzorce programowania pozwalające określić sposób patrzenia programisty na wykonanie programu czy przepływ sterowania. Paradygmat opisuje sposób, w jaki należy pisać program – wskazuje dozwolone i zakazanie praktyki. Często zdarza się, że język programowania wspiera wiele paradygmatów. Przyjrzymy się, w jaki sposób należy pisać programy z wykorzystaniem paradygmatu obiektowego. Naszym zadaniem na dziś będzie zaimplementowanie zestawu klas, które będą reprezentować hierarchię pracowników w pewnej firmie. Program powinien wyświetlić pensje pracowników oraz wynagrodzenie szefa. Implementację rozpocznie od zadeklarowanie class pracownik. Oto kod poniżej. 1 class Pracownik: 2 wyplata = 0 3 4 def wyswietl_wplate_pracownika(self, imie): 5 print('Wplata pracownika o imieniu ' + imie + ' wynosi: ' + str(self.wplata)) Spróbujemy stworzyć kilka obiektów i uzupełnić je danymi. Obiekty stworzymy na bazie wcześnie zadeklarowanej klasy którą potraktujemy jak instrukcję ich tworzenia. Takie określenie może być nie intuicyjne dlatego odwołajmy się do przykładu datownika. Stwórzmy pierwszy obiekt typu pracownik. 7 if __name__ == '__main__': 8 janek = Pracownik() 9 janek.wplata = 1500 10 janek.wyswietl_wplate_pracownika('Janek') 11 Teraz stwórzmy drugiego pracownika. 12 pawel = Pracownik() 13 pawel.wyswietl_wplate_pracownika('Pawel') Stajemy przed dylematem, chcielibyśmy przechowywać informację na temat wypłaty szefa. Problem ten możemy rozwiązać na kilka sposobów. Pierwszy sposób.. Próbę dopisania nowego pola typu int o nazwie premia. Jeżeli pracownik nie jest szefem, zerujemy wartość pola premia. Drugi sposób. Możemy stworzyć nową klasę Szef i skopiować do tej klasy pola z klasy Pracownik. Trzeci sposób dziedziczenie. Stworzenie nowej klasy Szef, która będzie dziedziczyć po klasie Pracownik. Dokładnie omówimy ten trzeci sposób. Kod przesuwamy od wiersza siódmego w dół i wpisujemy kolejno nowe linijki wierszy. 7 class Szef(Pracownik): 8 premia = 0 9 10 def policz_wynagrodzenie(self): 11 wynik = self.wplata + self.premia 12 print('Wynagrodzenie szefa wynosi ' + str(wynik)) Stworzymy nowy obiekt klasy Szef 22 kuba = Szef() 23 kuba.wplata = 3000 24 kuba.premia = 1500 25 kuba.policz_wynagrodzenie() Po dodaniu class Szef, def policz_wynagodzenie i stworzeniu nowego obiektu o klasie Szef – Kuba nasz kod wygląda w całości tak: 1 class Pracownik: 2 wyplata = 0 3 4 def wyswietl_wplate_pracownika(self, imie): 5 print('Wplata pracownika o imieniu ' + imie + ' wynosi: ' + str(self.wplata)) 6 7 class Szef(Pracownik): 8 premia = 0 9 10 def policz_wynagrodzenie(self): 11 wynik = self.wplata + self.premia 12 print('Wynagrodzenie szefa wynosi ' + str(wynik)) 13 14 if __name__ == '__main__': 15 janek = Pracownik() 16 janek.wplata = 1500 17 janek.wyswietl_wplate_pracownika('Janek') 18 19 pawel = Pracownik() 20 pawel.wyswietl_wplate_pracownika('Pawel') 21 22 kuba = Szef() 23 kuba.wplata = 3000 24 kuba.premia = 1500 25 kuba.policz_wynagrodzenie() Klasa jest definicją obiektu składającego się z pól – zmiennych przechowujących dane oraz metod – funkcji, pozwalających operować na informacjach zapisanych w polach. Na podstawie klas tworzymy obiekty. Są one niezależne od siebie. Wykonując operację na polu lub metodzie zapisanej w obiekcie, wykorzystujemy notację z kropką. Dziedziczenie polega na rozszerzeniu klasy bazowej o kolejne pola i metody zapisane w klasie rozszerzającej. Klasa dziedzicząca może korzystać z pól i metod klasy nadrzędnej . Python pozwala dziedziczyć po wielu klasach.