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:

  • Zwierze to 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:

  • Triathlonista dziedziczy po Pływak i Biegacz.
  • Metoda umiejetnosc jest 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, ani cls.
  • 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:

  • dodaj nie 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.