Hermetyzacja

Hermetyzacja oznacza ukrywanie implementacji. W języku Python polega ona na oznaczeniu wybranych metod bądź pól, które nie powinny być używane poza klasą, w której są zdefiniowane.

Przykład 1

Przeanalizujmy przypadek, w którym tworzymy oprogramowanie sterujące silnikiem okrętu. Chcemy umożliwić sterowanie w taki sposób, aby przy ustawieniach: cała wstecz, silniki stop, cała naprzód niemożliwa była zmiana z pozycji cała naprzód do cała wstecz i odwrotnie – z pominięciem silniki stop. Dla celów wizualizacji użyjemy wypisywania danych na ekranie, z zastosowaniem techniki f‑stringf‑stringf‑string.

Napiszemy definicję klasy bez wykorzystania hermetyzacji.

Linia 1. class SilnikOkretowy dwukropek. Linia 2. stany znak równości otwórz nawias kwadratowy cudzysłów Cała wstecz cudzysłów przecinek cudzysłów Silniki STOP cudzysłów przecinek cudzysłów Cała naprzód cudzysłów zamknij nawias kwadratowy. Linia 4. def podkreślnik podkreślnik init podkreślnik podkreślnik otwórz nawias okrągły self zamknij nawias okrągły dwukropek. Linia 5. self kropka wskazanie znak równości 1. Linia 6. self kropka stan podkreślnik silnika znak równości self kropka stany otwórz nawias kwadratowy self kropka wskazanie zamknij nawias kwadratowy. Linia 7. self kropka aktualizuj podkreślnik silniki otwórz nawias okrągły 0 zamknij nawias okrągły. Linia 9. def aktualizuj podkreślnik silniki otwórz nawias okrągły self przecinek krok zamknij nawias okrągły dwukropek. Linia 10. if krok otwórz nawias ostrokątny 0 and self kropka wskazanie zamknij nawias ostrokątny 0 dwukropek. Linia 11. print otwórz nawias okrągły cudzysłów Zmiana silników cudzysłów zamknij nawias okrągły. Linia 12. self kropka wskazanie plus znak równości krok. Linia 13. if krok zamknij nawias ostrokątny 0 and self kropka wskazanie otwórz nawias ostrokątny 2 dwukropek. Linia 14. print otwórz nawias okrągły cudzysłów Zmiana silników cudzysłów zamknij nawias okrągły. Linia 15. self kropka wskazanie plus znak równości krok. Linia 17. self kropka stan podkreślnik silnika znak równości self kropka stany otwórz nawias kwadratowy self kropka wskazanie zamknij nawias kwadratowy. Linia 18. print otwórz nawias okrągły f cudzysłów Aktualnie silniki dwukropek otwórz nawias klamrowy self kropka stan podkreślnik silnika zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 20. def silniki podkreślnik naprzod otwórz nawias okrągły self zamknij nawias okrągły dwukropek. Linia 21. self kropka aktualizuj podkreślnik silniki otwórz nawias okrągły 1 zamknij nawias okrągły. Linia 23. def silniki podkreślnik wstecz otwórz nawias okrągły self zamknij nawias okrągły dwukropek. Linia 24. self kropka aktualizuj podkreślnik silniki otwórz nawias okrągły minus 1 zamknij nawias okrągły. Linia 27. kratka inicjalizacja zmiennej obiektowej. Linia 28. batory znak równości SilnikOkretowy otwórz nawias okrągły zamknij nawias okrągły. Linia 29. kratka Aktualnie silniki dwukropek Silniki STOP. Linia 31. batory kropka silniki podkreślnik naprzod otwórz nawias okrągły zamknij nawias okrągły. Linia 32. kratka Zmiana silników. Linia 33. kratka Aktualnie silniki dwukropek Cała naprzód. Linia 35. batory kropka silniki podkreślnik naprzod otwórz nawias okrągły zamknij nawias okrągły. Linia 36. kratka Aktualnie silniki dwukropek Cała naprzód. Linia 38. batory kropka silniki podkreślnik naprzod otwórz nawias okrągły zamknij nawias okrągły. Linia 39. kratka Aktualnie silniki dwukropek Cała naprzód. Linia 41. batory kropka silniki podkreślnik wstecz otwórz nawias okrągły zamknij nawias okrągły. Linia 42. kratka Zmiana silników. Linia 43. kratka Aktualnie silniki dwukropek Silniki STOP. Linia 45. batory kropka silniki podkreślnik wstecz otwórz nawias okrągły zamknij nawias okrągły. Linia 46. kratka Zmiana silników. Linia 47. kratka Aktualnie silniki dwukropek Cała wstecz. Linia 49. batory kropka silniki podkreślnik wstecz otwórz nawias okrągły zamknij nawias okrągły. Linia 50. kratka Aktualnie silniki dwukropek Cała wstecz.

Definiowanie bez żadnych dodatkowych oznaczeń pól czy metod, które powinny być prywatne, może skończyć się błędami w kodzie. Np. ktoś nie wiedząc o tym, że nie powinien modyfikować jakiejś zmiennej, nadpisze jej wartość, co spowoduje błąd – jak w przedstawionym przykładzie:

Linia 1. print otwórz nawias okrągły batory kropka stan podkreślnik silnika zamknij nawias okrągły. Linia 2. kratka Cała wstecz. Linia 3. print otwórz nawias okrągły batory kropka wskazanie zamknij nawias okrągły. Linia 4. kratka 0. Linia 6. batory kropka wskazanie znak równości 2. Linia 7. print otwórz nawias okrągły batory kropka wskazanie zamknij nawias okrągły. Linia 8. kratka 2. Linia 9. print otwórz nawias okrągły batory kropka stan podkreślnik silnika zamknij nawias okrągły. Linia 10. kratka Cała wstecz. Linia 11. batory kropka aktualizuj podkreślnik silniki otwórz nawias okrągły 0 zamknij nawias okrągły. Linia 12. kratka Aktualnie silniki dwukropek Cała naprzód. Linia 14. kratka wskazanie jest zmienną która powinna być modyfikowana tylko. Linia 15. kratka przez przeznaczone do tego funkcje przecinek ręczna zmiana jak tu może. Linia 16. kratka doprowadzić do tego przecinek że będziemy się odwoływać do indeksu. Linia 17. kratka większego niż rozmiar tablicy i zostanie zwrócony błąd. Linia 18. batory kropka wskazanie znak równości 5. Linia 19. batory kropka aktualizuj podkreślnik silniki otwórz nawias okrągły 0 zamknij nawias okrągły. Linia 20. kratka Traceback otwórz nawias okrągły most recent call last zamknij nawias okrągły dwukropek. Linia 21. kratka File cudzysłów otwórz nawias ostrokątny pyshell kratka 55 zamknij nawias ostrokątny cudzysłów przecinek line 1 przecinek in otwórz nawias ostrokątny module zamknij nawias ostrokątny. Linia 22. kratka batory kropka aktualizuj podkreślnik silniki otwórz nawias okrągły 0 zamknij nawias okrągły. Linia 23. kratka File cudzysłów prawy ukośnik home prawy ukośnik python prawy ukośnik idle minus src prawy ukośnik 0373 podkreślnik silniki podkreślnik okr podkreślnik hermet kropka py cudzysłów przecinek line 17 przecinek in aktualizuj podkreślnik silniki. Linia 24. kratka self kropka stan podkreślnik silnika znak równości self kropka stany otwórz nawias kwadratowy self kropka wskazanie zamknij nawias kwadratowy. Linia 25. kratka IndexError dwukropek list index out of range.

Hermetyzacja w języku Python polega na umowie między programistami, że będą przestrzegać ogólnie przyjętych norm. Metody i pola, które chcemy oznaczyć jako prywatne (czyli takie, które nie powinny być używane poza daną klasą), oznaczamy znakiem "_" na początku nazwy zmiennej lub metody np. _x.  Środowiska programistyczne często informują użytkownika, gdy w złym miejscu skorzysta ze zmiennej nazwanej w ten sposób.

Linia 1. class SilnikOkretowyPrywatny dwukropek. Linia 2. kratka zmiana tablicy na krotkę przecinek ponieważ jest ona niezmienna otwórz nawias okrągły immutable zamknij nawias okrągły. Linia 3. stany znak równości otwórz nawias okrągły cudzysłów Cała wstecz cudzysłów przecinek cudzysłów Silniki STOP cudzysłów przecinek cudzysłów Cała naprzód cudzysłów zamknij nawias okrągły. Linia 5. def podkreślnik podkreślnik init podkreślnik podkreślnik otwórz nawias okrągły self zamknij nawias okrągły dwukropek. Linia 6. self kropka podkreślnik wskazanie znak równości 1. Linia 7. self kropka podkreślnik stan podkreślnik silnika znak równości self kropka stany otwórz nawias kwadratowy self kropka podkreślnik wskazanie zamknij nawias kwadratowy. Linia 8. self kropka podkreślnik aktualizuj podkreślnik silniki otwórz nawias okrągły 0 zamknij nawias okrągły. Linia 10. def podkreślnik aktualizuj podkreślnik silniki otwórz nawias okrągły self przecinek krok zamknij nawias okrągły dwukropek. Linia 11. if krok otwórz nawias ostrokątny 0 and self kropka podkreślnik wskazanie zamknij nawias ostrokątny 0 dwukropek. Linia 12. print otwórz nawias okrągły cudzysłów Zmiana silników cudzysłów zamknij nawias okrągły. Linia 13. self kropka podkreślnik wskazanie plus znak równości krok. Linia 14. if krok zamknij nawias ostrokątny 0 and self kropka podkreślnik wskazanie otwórz nawias ostrokątny 2 dwukropek. Linia 15. print otwórz nawias okrągły cudzysłów Zmiana silników cudzysłów zamknij nawias okrągły. Linia 16. self kropka podkreślnik wskazanie plus znak równości krok. Linia 18. self kropka podkreślnik stan podkreślnik silnika znak równości self kropka stany otwórz nawias kwadratowy self kropka podkreślnik wskazanie zamknij nawias kwadratowy. Linia 19. print otwórz nawias okrągły f cudzysłów Aktualnie silniki dwukropek otwórz nawias klamrowy self kropka podkreślnik stan podkreślnik silnika zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 21. def silniki podkreślnik naprzod otwórz nawias okrągły self zamknij nawias okrągły dwukropek. Linia 22. self kropka podkreślnik aktualizuj podkreślnik silniki otwórz nawias okrągły 1 zamknij nawias okrągły. Linia 24. def silniki podkreślnik wstecz otwórz nawias okrągły self zamknij nawias okrągły dwukropek. Linia 25. self kropka podkreślnik aktualizuj podkreślnik silniki otwórz nawias okrągły minus 1 zamknij nawias okrągły.

Przy takim zapisie nadal możemy korzystać z metod, które nie są oznaczone jako prywatne.

Linia 1. pomerania znak równości SilnikOkretowyPrywatny otwórz nawias okrągły zamknij nawias okrągły. Linia 2. kratka Aktualnie silniki dwukropek Silniki STOP. Linia 4. pomerania kropka silniki podkreślnik naprzod otwórz nawias okrągły zamknij nawias okrągły. Linia 5. kratka Zmiana silników. Linia 6. kratka Aktualnie silniki dwukropek Cała naprzód. Linia 8. pomerania kropka silniki podkreślnik naprzod otwórz nawias okrągły zamknij nawias okrągły. Linia 9. kratka Aktualnie silniki dwukropek Cała naprzód. Linia 11. pomerania kropka silniki podkreślnik naprzod otwórz nawias okrągły zamknij nawias okrągły. Linia 12. kratka Aktualnie silniki dwukropek Cała naprzód. Linia 14. pomerania kropka silniki podkreślnik wstecz otwórz nawias okrągły zamknij nawias okrągły. Linia 15. kratka Zmiana silników. Linia 16. kratka Aktualnie silniki dwukropek Silniki STOP. Linia 18. pomerania kropka silniki podkreślnik wstecz otwórz nawias okrągły zamknij nawias okrągły. Linia 19. kratka Zmiana silników. Linia 20. kratka kratka Aktualnie silniki dwukropek Cała wstecz. Linia 22. pomerania kropka silniki podkreślnik wstecz otwórz nawias okrągły zamknij nawias okrągły. Linia 23. kratka Aktualnie siliniki dwukropek Cała wstecz.

Gdy spróbujemy użyć metod bądź pól ustawionych jako prywatne, okaże się, że wszystko działa bezproblemowo. Ostrzeżenie wysyłane przez środowisko to jedyny sygnał informujący nas, że coś jest nie w porządku.

Linia 1. pomerania kropka podkreślnik stan podkreślnik silnika znak równości cudzysłów Silnik zniszczony cudzysłów. Linia 2. print otwórz nawias okrągły pomerania kropka podkreślnik stan podkreślnik silnika zamknij nawias okrągły. Linia 3. kratka Silnik zniszczony.

Jeśli wykorzystamy zmienną lub metodę rozpoczynającą się od "_" (poza klasą, w której są zadeklarowane), możemy niecelowo doprowadzić do błędu działania programu.


Polimorfizm

Polimorfizm oznacza wielopostaciowość. Pozwala on zastosować jedną jednostkę (metodę, operator lub obiekt) do reprezentowania różnych typów w różnych scenariuszach.

Przykład 2

Przeanalizujmy przypadek, w którym tworzymy klasę Statek, opisującą ogólnie każdy obiekt pływający, a także klasy dziedziczące Bryg oraz Fregata (bryg oraz fregata to typy okrętów). Inicjalizację obiektów wykonamy za pomocą konstruktora zdefiniowanego w klasie Statek, wykorzystując funkcję super(). Pozwala to na używanie metod z klasy Statek w klasie potomnej. Dodatkowo przetestujemy działanie metod info()test(). Dla celów wizualizacji użyjemy funkcji wypisywania danych na ekranie, z zastosowaniem techniki f‑string.

Linia 1. class Statek dwukropek. Linia 2. def podkreślnik podkreślnik init podkreślnik podkreślnik otwórz nawias okrągły self przecinek rok podkreślnik wodowania zamknij nawias okrągły dwukropek. Linia 3. self kropka podkreślnik rok podkreślnik wodowania znak równości rok podkreślnik wodowania. Linia 4. print otwórz nawias okrągły f cudzysłów Utworzono obiekt otwórz nawias klamrowy self zamknij nawias klamrowy kropka cudzysłów zamknij nawias okrągły. Linia 6. def nowy podkreślnik rok otwórz nawias okrągły self zamknij nawias okrągły dwukropek. Linia 7. self kropka podkreślnik rok podkreślnik wodowania plus znak równości 1. Linia 9. def rok podkreślnik wodowania otwórz nawias okrągły self zamknij nawias okrągły dwukropek. Linia 10. return self kropka podkreślnik rok podkreślnik wodowania. Linia 12. class Bryg otwórz nawias okrągły Statek zamknij nawias okrągły dwukropek. Linia 13. def podkreślnik podkreślnik init podkreślnik podkreślnik otwórz nawias okrągły self przecinek rok podkreślnik wodowania zamknij nawias okrągły dwukropek. Linia 14. super otwórz nawias okrągły zamknij nawias okrągły kropka podkreślnik podkreślnik init podkreślnik podkreślnik otwórz nawias okrągły rok podkreślnik wodowania zamknij nawias okrągły. Linia 15. self kropka podkreślnik typ znak równości cudzysłów Bryg prawy ukośnik 2 maszty cudzysłów. Linia 17. def info otwórz nawias okrągły self zamknij nawias okrągły dwukropek. Linia 18. print otwórz nawias okrągły f cudzysłów Metoda w klasie otwórz nawias klamrowy podkreślnik podkreślnik class podkreślnik podkreślnik kropka podkreślnik podkreślnik name podkreślnik podkreślnik zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 19. print otwórz nawias okrągły f cudzysłów Obiekt otwórz nawias klamrowy self zamknij nawias klamrowy minus typ dwukropek otwórz nawias klamrowy self kropka podkreślnik typ zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 20. print otwórz nawias okrągły f cudzysłów Rok wodowania znak równości otwórz nawias klamrowy super otwórz nawias okrągły zamknij nawias okrągły kropka rok podkreślnik wodowania otwórz nawias okrągły zamknij nawias okrągły zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 22. def test otwórz nawias okrągły self zamknij nawias okrągły dwukropek. Linia 23. print otwórz nawias okrągły cudzysłów To jest wywołanie test minus Bryg otwórz nawias okrągły rok podkreślnik wodowania plus 20 zamknij nawias okrągły cudzysłów zamknij nawias okrągły. Linia 24. print otwórz nawias okrągły f cudzysłów wynik znak równości otwórz nawias klamrowy super otwórz nawias okrągły zamknij nawias okrągły kropka rok podkreślnik wodowania otwórz nawias okrągły zamknij nawias okrągły plus 20 zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 26. class Fregata otwórz nawias okrągły Statek zamknij nawias okrągły dwukropek. Linia 27. def podkreślnik podkreślnik init podkreślnik podkreślnik otwórz nawias okrągły self przecinek rok podkreślnik wodowania zamknij nawias okrągły dwukropek. Linia 28. super otwórz nawias okrągły zamknij nawias okrągły kropka podkreślnik podkreślnik init podkreślnik podkreślnik otwórz nawias okrągły rok podkreślnik wodowania zamknij nawias okrągły. Linia 29. self kropka podkreślnik typ znak równości cudzysłów Fregata prawy ukośnik 3 maszty cudzysłów. Linia 31. def info otwórz nawias okrągły self zamknij nawias okrągły dwukropek. Linia 32. print otwórz nawias okrągły f cudzysłów Metoda w klasie otwórz nawias klamrowy podkreślnik podkreślnik class podkreślnik podkreślnik kropka podkreślnik podkreślnik name podkreślnik podkreślnik zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 33. print otwórz nawias okrągły f cudzysłów Obiekt otwórz nawias klamrowy self zamknij nawias klamrowy minus typ dwukropek otwórz nawias klamrowy self kropka podkreślnik typ zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 34. print otwórz nawias okrągły f cudzysłów Rok wodowania znak równości otwórz nawias klamrowy super otwórz nawias okrągły zamknij nawias okrągły kropka rok podkreślnik wodowania otwórz nawias okrągły zamknij nawias okrągły zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 36. def test otwórz nawias okrągły self zamknij nawias okrągły dwukropek. Linia 37. print otwórz nawias okrągły cudzysłów To jest wywołanie test minus Fregata otwórz nawias okrągły rok podkreślnik wodowania plus 40 zamknij nawias okrągły cudzysłów zamknij nawias okrągły. Linia 38. print otwórz nawias okrągły f cudzysłów wynik znak równości otwórz nawias klamrowy super otwórz nawias okrągły zamknij nawias okrągły kropka rok podkreślnik wodowania otwórz nawias okrągły zamknij nawias okrągły plus 40 zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 41. kratka definiujemy obiekty oraz tworzymy listę minus minus minus wartości ID obiektów mogą być różne na różnych komputerach. Linia 42. statek01 znak równości Fregata otwórz nawias okrągły 2001 zamknij nawias okrągły. Linia 43. statek02 znak równości Fregata otwórz nawias okrągły 2002 zamknij nawias okrągły. Linia 44. statek03 znak równości Bryg otwórz nawias okrągły 2010 zamknij nawias okrągły. Linia 45. statek04 znak równości Bryg otwórz nawias okrągły 2012 zamknij nawias okrągły. Linia 46. sts znak równości Bryg otwórz nawias okrągły 1992 zamknij nawias okrągły. Linia 47. cutty podkreślnik sark znak równości Fregata otwórz nawias okrągły 1869 zamknij nawias okrągły. Linia 49. kratka Utworzono obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a2ffac50 zamknij nawias ostrokątny kropka. Linia 50. kratka Utworzono obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a410dba8 zamknij nawias ostrokątny kropka. Linia 51. kratka Utworzono obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a410dc18 zamknij nawias ostrokątny kropka. Linia 52. kratka Utworzono obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a2ffadd8 zamknij nawias ostrokątny kropka. Linia 53. kratka Utworzono obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a2ffada0 zamknij nawias ostrokątny kropka. Linia 54. kratka Utworzono obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a2ffad30 zamknij nawias ostrokątny kropka. Linia 56. spis podkreślnik statkow znak równości otwórz nawias kwadratowy statek01 przecinek sts przecinek statek02 przecinek statek03 przecinek cutty podkreślnik sark przecinek statek04 zamknij nawias kwadratowy.

Możemy teraz napisać kod, który sprawdzi, czy obiekty są uznawane za instancje klasy Statek. W języku Python sprawdzenie przynależności danego obiektu do klasy wykonuje się metodą isinstance().

Linia 1. for statek in spis podkreślnik statkow dwukropek. Linia 2. print otwórz nawias okrągły f cudzysłów isinstance otwórz nawias okrągły otwórz nawias klamrowy statek zamknij nawias klamrowy przecinek Bryg zamknij nawias okrągły znak równości otwórz nawias klamrowy isinstance otwórz nawias okrągły statek przecinek Bryg zamknij nawias okrągły zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 3. print otwórz nawias okrągły f cudzysłów isinstance otwórz nawias okrągły otwórz nawias klamrowy statek zamknij nawias klamrowy przecinek Fregata zamknij nawias okrągły znak równości otwórz nawias klamrowy isinstance otwórz nawias okrągły statek przecinek Fregata zamknij nawias okrągły zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 4. print otwórz nawias okrągły f cudzysłów isinstance otwórz nawias okrągły otwórz nawias klamrowy statek zamknij nawias klamrowy przecinek Statek zamknij nawias okrągły znak równości otwórz nawias klamrowy isinstance otwórz nawias okrągły statek przecinek Statek zamknij nawias okrągły zamknij nawias klamrowy cudzysłów zamknij nawias okrągły. Linia 5. print otwórz nawias okrągły cudzysłów minus minus minus minus minus minus minus minus minus minus cudzysłów zamknij nawias okrągły. Linia 8. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a2ffac50 zamknij nawias ostrokątny przecinek Bryg zamknij nawias okrągły znak równości False. Linia 9. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a2ffac50 zamknij nawias ostrokątny przecinek Fregata zamknij nawias okrągły znak równości True. Linia 10. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a2ffac50 zamknij nawias ostrokątny przecinek Statek zamknij nawias okrągły znak równości True. Linia 11. kratka minus minus minus minus minus minus minus minus minus minus. Linia 12. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a2ffada0 zamknij nawias ostrokątny przecinek Bryg zamknij nawias okrągły znak równości True. Linia 13. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a2ffada0 zamknij nawias ostrokątny przecinek Fregata zamknij nawias okrągły znak równości False. Linia 14. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a2ffada0 zamknij nawias ostrokątny przecinek Statek zamknij nawias okrągły znak równości True. Linia 15. kratka minus minus minus minus minus minus minus minus minus minus. Linia 16. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a410dba8 zamknij nawias ostrokątny przecinek Bryg zamknij nawias okrągły znak równości False. Linia 17. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a410dba8 zamknij nawias ostrokątny przecinek Fregata zamknij nawias okrągły znak równości True. Linia 18. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a410dba8 zamknij nawias ostrokątny przecinek Statek zamknij nawias okrągły znak równości True. Linia 19. kratka minus minus minus minus minus minus minus minus minus minus. Linia 20. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a410dc18 zamknij nawias ostrokątny przecinek Bryg zamknij nawias okrągły znak równości True. Linia 21. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a410dc18 zamknij nawias ostrokątny przecinek Fregata zamknij nawias okrągły znak równości False. Linia 22. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a410dc18 zamknij nawias ostrokątny przecinek Statek zamknij nawias okrągły znak równości True. Linia 23. kratka minus minus minus minus minus minus minus minus minus minus. Linia 24. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a2ffad30 zamknij nawias ostrokątny przecinek Bryg zamknij nawias okrągły znak równości False. Linia 25. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a2ffad30 zamknij nawias ostrokątny przecinek Fregata zamknij nawias okrągły znak równości True. Linia 26. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a2ffad30 zamknij nawias ostrokątny przecinek Statek zamknij nawias okrągły znak równości True. Linia 27. kratka minus minus minus minus minus minus minus minus minus minus. Linia 28. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a2ffadd8 zamknij nawias ostrokątny przecinek Bryg zamknij nawias okrągły znak równości True. Linia 29. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a2ffadd8 zamknij nawias ostrokątny przecinek Fregata zamknij nawias okrągły znak równości False. Linia 30. kratka isinstance otwórz nawias okrągły otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a2ffadd8 zamknij nawias ostrokątny przecinek Statek zamknij nawias okrągły znak równości True.

Możemy również pokazać polimorfizm – w tym celu, dla wszystkich obiektów z listy spis_statkow, dziedziczących po klasie Statek, wywołamy metodę test(). Zauważ, że metoda działa inaczej dla obiektów różnych klas.

Linia 1. for statek in spis podkreślnik statkow dwukropek. Linia 2. print otwórz nawias okrągły cudzysłów minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus cudzysłów zamknij nawias okrągły. Linia 3. statek kropka test otwórz nawias okrągły zamknij nawias okrągły. Linia 4. print otwórz nawias okrągły cudzysłów minus minus minus minus minus cudzysłów zamknij nawias okrągły. Linia 5. statek kropka info otwórz nawias okrągły zamknij nawias okrągły. Linia 8. kratka minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus. Linia 9. kratka To jest wywołanie test minus Fregata otwórz nawias okrągły rok podkreślnik wodowania plus 40 zamknij nawias okrągły. Linia 10. kratka wynik znak równości 2041. Linia 11. kratka minus minus minus minus minus. Linia 12. kratka Metoda w klasie Fregata. Linia 13. kratka Obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a2ffac50 zamknij nawias ostrokątny minus typ dwukropek Fregata prawy ukośnik 3 maszty. Linia 14. kratka Rok wodowania znak równości 2001. Linia 15. kratka minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus. Linia 16. kratka To jest wywołanie test minus Bryg otwórz nawias okrągły rok podkreślnik wodowania plus 20 zamknij nawias okrągły. Linia 17. kratka wynik znak równości 2012. Linia 18. kratka minus minus minus minus minus. Linia 19. kratka Metoda w klasie Bryg. Linia 20. kratka Obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a2ffada0 zamknij nawias ostrokątny minus typ dwukropek Bryg prawy ukośnik 2 maszty. Linia 21. kratka Rok wodowania znak równości 1992. Linia 22. kratka minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus. Linia 23. kratka To jest wywołanie test minus Fregata otwórz nawias okrągły rok podkreślnik wodowania plus 40 zamknij nawias okrągły. Linia 24. kratka wynik znak równości 2042. Linia 25. kratka minus minus minus minus minus. Linia 26. kratka Metoda w klasie Fregata. Linia 27. kratka Obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a410dba8 zamknij nawias ostrokątny minus typ dwukropek Fregata prawy ukośnik 3 maszty. Linia 28. kratka Rok wodowania znak równości 2002. Linia 29. kratka minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus. Linia 30. kratka To jest wywołanie test minus Bryg otwórz nawias okrągły rok podkreślnik wodowania plus 20 zamknij nawias okrągły. Linia 31. kratka wynik znak równości 2030. Linia 32. kratka minus minus minus minus minus. Linia 33. kratka Metoda w klasie Bryg. Linia 34. kratka Obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a410dc18 zamknij nawias ostrokątny minus typ dwukropek Bryg prawy ukośnik 2 maszty. Linia 35. kratka Rok wodowania znak równości 2010. Linia 36. kratka minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus. Linia 37. kratka To jest wywołanie test minus Fregata otwórz nawias okrągły rok podkreślnik wodowania plus 40 zamknij nawias okrągły. Linia 38. kratka wynik znak równości 1909. Linia 39. kratka minus minus minus minus minus. Linia 40. kratka Metoda w klasie Fregata. Linia 41. kratka Obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a2ffad30 zamknij nawias ostrokątny minus typ dwukropek Fregata prawy ukośnik 3 maszty. Linia 42. kratka Rok wodowania znak równości 1869. Linia 43. kratka minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus minus. Linia 44. kratka To jest wywołanie test minus Bryg otwórz nawias okrągły rok podkreślnik wodowania plus 20 zamknij nawias okrągły. Linia 45. kratka wynik znak równości 2032. Linia 46. kratka minus minus minus minus minus. Linia 47. kratka Metoda w klasie Bryg. Linia 48. kratka Obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a2ffadd8 zamknij nawias ostrokątny minus typ dwukropek Bryg prawy ukośnik 2 maszty. Linia 49. kratka Rok wodowania znak równości 2012.

Dodatkowo możemy wykonać metodę, która jest zdefiniowana w klasie Statek, a wynik jej działania zobaczymy podczas uruchamiania kolejnej metody.

Linia 1. for statek in spis podkreślnik statkow dwukropek. Linia 2. statek kropka nowy podkreślnik rok otwórz nawias okrągły zamknij nawias okrągły. Linia 3. kratka tu nie ma żadnej informacji zwrotnej przecinek metoda tylko aktualizuje właściwość obiektu. Linia 5. for statek in spis podkreślnik statkow dwukropek. Linia 6. statek kropka info otwórz nawias okrągły zamknij nawias okrągły. Linia 9. kratka Metoda w klasie Fregata. Linia 10. kratka Obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a2ffac50 zamknij nawias ostrokątny minus typ dwukropek Fregata prawy ukośnik 3 maszty. Linia 11. kratka Rok wodowania znak równości 2002. Linia 12. kratka Metoda w klasie Bryg. Linia 13. kratka Obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a2ffada0 zamknij nawias ostrokątny minus typ dwukropek Bryg prawy ukośnik 2 maszty. Linia 14. kratka Rok wodowania znak równości 1993. Linia 15. kratka Metoda w klasie Fregata. Linia 16. kratka Obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a410dba8 zamknij nawias ostrokątny minus typ dwukropek Fregata prawy ukośnik 3 maszty. Linia 17. kratka Rok wodowania znak równości 2003. Linia 18. kratka Metoda w klasie Bryg. Linia 19. kratka Obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a410dc18 zamknij nawias ostrokątny minus typ dwukropek Bryg prawy ukośnik 2 maszty. Linia 20. kratka Rok wodowania znak równości 2011. Linia 21. kratka Metoda w klasie Fregata. Linia 22. kratka Obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Fregata object at 0x7f22a2ffad30 zamknij nawias ostrokątny minus typ dwukropek Fregata prawy ukośnik 3 maszty. Linia 23. kratka Rok wodowania znak równości 1870. Linia 24. kratka Metoda w klasie Bryg. Linia 25. kratka Obiekt otwórz nawias ostrokątny podkreślnik podkreślnik main podkreślnik podkreślnik kropka Bryg object at 0x7f22a2ffadd8 zamknij nawias ostrokątny minus typ dwukropek Bryg prawy ukośnik 2 maszty. Linia 26. kratka Rok wodowania znak równości 2013.

Dla zainteresowanych

W języku Python przykładem polimorfizmu jest operator „+”. Działa on w różny sposób w zależności od typu danych.

Linia 1. kratka przykład działania operatora plus dla typów numerycznych. Linia 2. print otwórz nawias okrągły 3 plus 3 zamknij nawias okrągły. Linia 3. kratka 6. Linia 4. print otwórz nawias okrągły 3 plus 3 kropka 0 zamknij nawias okrągły. Linia 5. kratka 6 kropka 0. Linia 6. kratka przykład działania operatora plus dla typów znakowych. Linia 7. print otwórz nawias okrągły cudzysłów 3 cudzysłów plus cudzysłów 3 cudzysłów zamknij nawias okrągły. Linia 8. kratka 33.
Dla zainteresowanych

Innym przykładem polimorfizmu w języku Python jest funkcja len(), która działa dla różnych typów danych w ten sam sposób.

Linia 1. kratka przykład działania. Linia 2. kratka str. Linia 3. print otwórz nawias okrągły len otwórz nawias okrągły cudzysłów Python to język programowania kropka cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 4. kratka 30. Linia 5. kratka dict. Linia 6. print otwórz nawias okrągły len otwórz nawias okrągły otwórz nawias klamrowy 1 dwukropek cudzysłów Python cudzysłów przecinek 2 dwukropek cudzysłów Linux cudzysłów przecinek 3 dwukropek cudzysłów Open Source cudzysłów zamknij nawias klamrowy zamknij nawias okrągły zamknij nawias okrągły. Linia 7. kratka 3. Linia 8. kratka list. Linia 9. print otwórz nawias okrągły len otwórz nawias okrągły otwórz nawias kwadratowy 1 przecinek 3 przecinek 4 przecinek otwórz nawias kwadratowy 1 przecinek 1 zamknij nawias kwadratowy przecinek cudzysłów Python cudzysłów przecinek True przecinek 3 kropka 14 zamknij nawias kwadratowy zamknij nawias okrągły zamknij nawias okrągły. Linia 10. kratka 7. Linia 11. kratka tuple. Linia 12. print otwórz nawias okrągły len otwórz nawias okrągły otwórz nawias okrągły 1 przecinek 3 przecinek 4 przecinek cudzysłów Python cudzysłów przecinek True przecinek 3 kropka 14 zamknij nawias okrągły zamknij nawias okrągły zamknij nawias okrągły. Linia 13. kratka 6. Linia 14. kratka niektóre typy danych nie są obsługiwane przez funkcję len otwórz nawias okrągły zamknij nawias okrągły. Linia 15. kratka int. Linia 16. print otwórz nawias okrągły len otwórz nawias okrągły 4 zamknij nawias okrągły zamknij nawias okrągły. Linia 17. kratka Traceback otwórz nawias okrągły most recent call last zamknij nawias okrągły dwukropek. Linia 18. kratka File cudzysłów d dwukropek lewy ukośnik Programming lewy ukośnik VSCProjects lewy ukośnik Poprawianie lewy ukośnik 0431 lewy ukośnik test kropka py cudzysłów przecinek line 16 przecinek in otwórz nawias ostrokątny module zamknij nawias ostrokątny. Linia 19. kratka print otwórz nawias okrągły len otwórz nawias okrągły 4 zamknij nawias okrągły zamknij nawias okrągły. Linia 20. kratka TypeError dwukropek object of type apostrof int apostrof has no len otwórz nawias okrągły zamknij nawias okrągły.
Już wiesz

Podsumujmy najważniejsze elementy tego e‑materiału:

  • język programowania Python jest w pełni językiem obiektowym,

  • zawiera narzędzia i sposoby na bezproblemowe stosowanie obiektowego paradygmatu programowania,

  • pozwala wygodnie tworzyć klasy, obiekty, właściwości i metody.

Słownik

f‑string
f‑string

sposób zapisywania zmiennych w łańcuchu znaków przeznaczonym do wyświetlenia za pomocą funkcji print(); dostępny od wersji 3.6 języka Python; polecenie wykorzystujące mechanizm f‑string ma postać: f"Napis, a w nim {zmienna} do wypisania"; dokładnie opisany w dokumencie PEP 498 – Literal String Interpolation