SAMOUCZEK JĘZYKA PYTHON ROZDZIAŁY   
Rozdział 8: Klasy

1: Terminologia- 2: Przestrzenie i zasięgi nazw w Pythonie- 3: Składnia definicji klasy - 4: Obiekty klasy
5: Obiekty konkretu klasy- 6: Obiekty metod- 7: Luźne uwagi - 8: Dziedziczenie- 9: Dziedziczenie wielorakie
10: Zmienne prywatne- 11: Sztuczki i chwyty - 12: Wjątki mogą być klasami

Lekcja 1: Słowo na temat terminologii


System klas w Pythonie wyrażony jest minimalnym zestawem nowych środków składniowych i semantycznych. Jest to mieszanka mechanizmów znanych w C++ i Moduli-3. Tak jak w przypadku modułów, klasy w Pythonie nie stawiają żadnych barier pomiędzy swoją definicją a programistą. Polega się tutaj raczej na "grzeczności" programisty, którego dobre wychowanie nie pozwala na "włamywanie się do definicji" klasy. Najważniejsze cechy systemu klas zachowane są tu w całej swej mocy: mechanizm dziedziczenia klas pozwala na posiadanie wielu klas bazowych, klasa pochodna jest w stanie przesłonić definicje metod klas bazowych, jej metoda może wywoływać metodę klasy bazowej o tej samej nazwie. Obiekty mogą posiadać dowolną liczbę danych prywatnych.

W terminologii przejętej w C++, wszystkie składowe klasy pythonowej (włącznie z atrybutami) są publiczne, a wszystkie funkcje składowe są wirtualne. Nie istnieją specjalne funkcje destruktora i konstruktora. Podobnie jak w Moduli-3 nie istnieją skrótowe sposoby zapisu odniesienia do składowej obiektu we wnętrzu metody: metoda deklarowana jest z wymienionym wprost pierwszym argumentem reprezentującym obiekt, na rzecz którego zostanie wywołana. Podobnie jak w Smalltalku, klasy same są obiektami, aczkolwiek w szerszym tego słowa znaczeniu: w Pythonie wszystkie typy danych to obiekty. Ta cecha określa semantykę mechanizmu importowania i zmiany nazw. Jednak, podobnie jak w C++ i Moduli-3, typy wbudowane nie mogą być użyte jako klasy bazowe klas zdefiniowanych przez użytkownika. Tak jak w C++, ale w odróżnieniu od Moduli-3, większość wbudowanych operatorów mogą zostać za pomocą specjalnej składni przedefiniowane dla różnych typów klasowych.

Z powodu braku ogólnie przyjętej terminologii, w odniesieniu do klas używać będę terminów z języka Smalltalk i C++.
Należy wiedzieć, że istnieje pewna terminologiczna pułapka dla czytelników obeznanych z technologią obiektową: słowo «obiekt» w Pythonie nie oznacza koniecznie konkretu (instancji) klasy. Podobnie jak w C++ i Moduli-3, w odróżnieniu od Smalltalka, nie wszystkie typy w Pythonie są klasowe. Podstawowe, wbudowane typy danych, jak liczby całkowite i listy nie są klasowe (tzn. nie posiadają klasy), nawet tak egzotyczne typy jak pliki też nie są. Jednakże, wszystkie typy Pythona przejawiają w swym zachowaniu to, co najlepiej można by wyrazić słowem «obiekt».
Obiekty posiadają swoją indywidualność, mogąc posiadać jednocześnie wiele nazw (w wielu zasięgach nazw). W innych językach programowania nazywa się to aliasami. Zazwyczaj nie jest to docenianie przy pierwszym spotkaniu z Pythonem i w bezpieczny sposób jest ignorowane przy pracy z niemutowalnymi typami danych (liczbami, napisami, niemutowalnymi listami). Jednakże, aliasy wpływają (celowo) na semantykę kodu Pythona, gdy w grę wchodzą mutowalne typy danych, takie jak listy, słowniki i większość typów reprezentujących byty jednostkowe na zewnątrz programu (pliki, okna itp.) Zwykle aliasy przynoszą korzyści, ponieważ zachowują się pod pewnymi względami jak wskaźniki. Na przykład: przekazanie obiektu jako argumentu wywołania nie kosztuje dużo tylko w przypadku przekazania przez implementację wskaźnika do niego. Jeżeli funkcja modyfikuje przekazany w ten sposób obiekt, wywołujący funkcje widzi tę zmianę - jest to powodem występowania dwóch różnych mechanizmów przekazywania parametrów np. w Pascalu.

Strona główna - O Pythonie - Interpreter - Samouczek - Przykłady programów - Linki