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 4: Obiekty klas


Na obiektach klasy można przeprowadzić dwa rodzaje operacji: odniesienia do atrybutów i konkretyzację.

Odniesienie do atrybutu da się wyrazić za pomocą standardowej składni używanej w przypadku odniesień dla wszystkich atrybutów w Pythonie: obiekt.nazwa. Prawidłowymi nazwami atrybutów są nazwy, które istniały w przestrzeni nazw klasy w czasie tworzenia jej obiektu. Tak więc, jeśli definicja klasy wygląda następująco:

class MojaKlasa:
    "Prosta, przykladowa klasa"
    i = 12345
    def f(x):
        return 'witaj swiecie'

MojaKlasa.i i MojaKlasa.f są prawidłowymi odniesieniami do jej atrybutów, których wartością jest odpowiednio liczba całkowita i obiekt metody. Atrybutom klasy można przypisywać wartości, w ten sposób można zmienić wartość MojaKlasa.i poprzez przypisanie. __doc__ jest także prawidłową nazwą atrybutu klasy, którego wartością jest napis dokumentacyjny należący do klasy: "Prosta, przykładowa klasa".

Konkretyzację klasy przeprowadza się używając notacji wywołania funkcji. [ Należy tylko udać, że obiekt klasy jest bezparametrową funkcją, która zwraca instancję (konkret) klasy.] Oto przykład (używa definicji klasy z poprzedniego ćwiczenia):

x = MojaKlasa()
w którym tworzy się nowy konkret klasy i wiąże się ten obiekt z nazwą zmiennej lokalnej x poprzez przypisanie do niej.
Operacja konkretyzacji ("wywołanie" obiektu klasy) tworzy pusty obiekt. Dla wielu klas występuje konieczność stworzenia swojego konkretu w pewnym znanym, początkowym stanie. Dlatego też, można zdefiniować dla klas specjalną metodę o nazwie __init__(), tak jak poniżej:
    def __init__(self):
        self.dane = []

W momencie konkretyzacji klasy, automatycznie wywołana zostanie metoda __init__() dla nowopowstałego konkretu klasy.

Tak więc, w tym przykładzie, nowy, zainicjalizowany konkret klasy można uzyskać poprzez:

x = MojaKlasa()

Oczywiście, dla zwiększenia wygody w użyciu, metoda __init__() może posiadać argumenty. W tym przypadku, argumenty dane na wejściu operatora konkretyzacji klasy, przekazywane są do __init__(). Na przykład:

>>> class Zespolona:
...     def __init__(self, rzeczywista, urojona):
...         self.r = rzeczywista
...         self.i = urojona
...
>>> x = Zespolona(3.0,-4.5)
>>> x.r, x.i
(3.0, -4.5)








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