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 7: Luźne uwagi
Nazwy atrybuty danych przesłaniają te same nazwy metod. Przyjęło się używać pewnej konwencji w nazewnictwie, aby uniknąć przypadkowego konfliktu nazw, co może powodować trudne do znalezienia błędy w dużych programach. Na przykład, rozpoczynanie nazw metod od dużej litery, dodawanie przedrostka do nazwy atrybutu danych (zazwyczaj jest to znak podkreślenia "_") lub używanie czasowników dla metod i rzeczowników dla danych.
Nie istnieje skrócony sposób dostępu z wnętrza metody do atrybutów danych (lub innych metod)! Moim zdaniem, zwiększa to czytelność ich kodu: nie ma szansy pomieszania nazw zmiennych lokalnych i zmiennych konkretu podczas przeglądania programu źródłowego.
Każdy obiekt funkcji, który jest atrybutem klasy definiuje metodę dla konkretu tej klasy. Nie jest konieczne aby definicja takiej funkcji była tekstowo umieszczona w definicji jej klasy: przypisanie obiektu funkcji do lokalnej zmiennej w klasie powoduje to samo jakby była ona tam umieszczona. Na przykład:
W tym wypadku f, g i h są wszystkie atrybutami klasy C, których wartością są obiekty funkcji i w konsekwencji stają się metodami konkretów klasy C - h jest dokładnie odpowiednikiem g. Metody mogą wywoływać inne metody poprzez użycie atrybutów metod obiektu self, np.:
Metody mogą używać odniesień do nazw globalnych w ten sam sposób jak zwykłe funkcje. Zasięg globalny związany z metodą jest po prostu tym modułem, który zawiera definicje klasy (sama klasa nigdy nie jest używana jako zasięg globalny). Rzadko można spotkać odniesienia do zmiennych globalnych w metodach. Istnieje parę dobrych powodów do używania zmiennych globalnych: funkcje i moduły importowane do przestrzeni nazw globalnych mogą zostać użyte przez metody, tak samo jak funkcje i klasy należace do tej samej przestrzeni. Zwykle klasa zawierająca tę metodę sama jest zdefiniowana w globalnym zasięgu. |
|