Zaawansowane techniki
1. Klasy abstrakcyjne i interfejsy
1.1 Co to są klasy abstrakcyjne?
- Klasa abstrakcyjna to klasa, która nie może być instancjonowana, czyli nie można tworzyć jej obiektów bezpośrednio.
- Służy jako szablon dla klas pochodnych, wymuszając implementację określonych metod.
- Pomaga w tworzeniu spójnego interfejsu dla różnych klas, co ułatwia polimorfizm.
1.2 Moduł abc w Pythonie
- Python udostępnia moduł
abc(Abstract Base Classes) do tworzenia klas abstrakcyjnych. @abstractmethod– dekorator oznaczający metodę, którą każda klasa pochodna musi zaimplementować.
Przykład:
Wyjaśnienie:
Zwierzeto klasa abstrakcyjna z metodądzwiek().- Każda klasa dziedzicząca musi zaimplementować
dzwiek(), w przeciwnym razie nie da się jej instancjonować.
2. Dziedziczenie wielokrotne i MRO (Method Resolution Order)
2.1 Dziedziczenie wielokrotne
- Python pozwala klasie dziedziczyć po wielu klasach bazowych jednocześnie.
- Pozwala łączyć funkcjonalności z różnych źródeł.
Przykład:
Wyjaśnienie:
Triathlonistadziedziczy poPływakiBiegacz.- Metoda
umiejetnoscjest wywoływana według kolejności klas bazowych.
2.2 Method Resolution Order (MRO)
- MRO określa kolejność, w jakiej Python szuka metod i atrybutów w klasach przy dziedziczeniu wielokrotnym.
- Można ją sprawdzić za pomocą:
Zasady:
- Python szuka najpierw w klasie pochodnej, potem w kolejności deklarowanej klas bazowych, a następnie w klasie
object. - Pozwala uniknąć konfliktów i jasno określa, która metoda zostanie wywołana.
3. Metody klasowe i statyczne
3.1 Metody klasowe – @classmethod
- Pierwszym parametrem zawsze jest
cls, który odnosi się do samej klasy, a nie obiektu. - Służą do operowania na atrybutach klasowych lub tworzenia instancji klasy w alternatywny sposób.
Przykład:
3.2 Metody statyczne – @staticmethod
- Nie przyjmują ani
self, anicls. - Są powiązane z klasą logicznie, ale nie operują na stanie obiektu ani klasy.
- Służą np. do funkcji pomocniczych powiązanych z klasą.
Przykład:
Wyjaśnienie:
dodajnie potrzebuje ani obiektu, ani atrybutów klasy, dlatego jest statyczną metodą.- Można ją wywołać bez tworzenia instancji klasy.
4. Podsumowanie – zaawansowane techniki
- Klasy abstrakcyjne i metody abstrakcyjne wymuszają spójny interfejs w klasach pochodnych.
- Dziedziczenie wielokrotne pozwala łączyć funkcjonalności wielu klas, a MRO określa kolejność wyszukiwania metod.
- Metody klasowe (
@classmethod) operują na klasie, statyczne (@staticmethod) nie wymagają obiektu ani klasy. - Te techniki pozwalają tworzyć bardziej elastyczne, modularne i skalowalne aplikacje w Pythonie.