2. Metody statyczne
Specjalne metody, kt坦re uruchamiane s bez
konkretnej instancji. Oznacza to, 甜e mo甜liwe jest
uruchomienie kodu w niej zawartego, nie tworzc
obiektu klasy.
Aby zmieni metod zwyk w metod statyczn
nale甜y u甜y dekoratora @staticmethod.
W odr坦甜nieniu od zwykej metody nie posiada ona
argumentu self.
3. Metody statyczne - zadanie
Stw坦rz klas Printer kt坦ra speni nastpujce wymagania:
pole ink_level przechowuje informacj o poziomie napenienia tuszu (od 0.0 do 1.0)
poziom napenienia tuszu ustawiany jest podczas tworzenia nowej drukarki
metoda print, kt坦ra przyjmuje cig znak坦w i na jego podstawie wywietla komunikat Wydrukowano X stron.
Po ka甜dej wydrukowanej stronie poziom tuszu zmniejsza si o 0.07
metoda calc_pages kt坦ra na podstawie iloci znak坦w zwraca informacjo tym, ile stron potrzeba do druku
(ka甜de rozpoczte 100 znak坦w to 1 strona)
Poni甜ej deklaracji klasy utw坦rz dwie drukarki:
printer_1 - pocztkowy poziom napenienia tuszu to 0.3. Drukarka drukuje 310 znak坦w.
printer_2 - pocztkowy poziom napenienia tuszu to 0.8. Drukarka drukuje 10 000 znak坦w.
4. Metody klasowe
Metody klasowe bardzo mocno przypominaj
metody statyczne pod tym wzgldem, 甜e do ich
uruchomienia r坦wnie甜 nie jest wymagana instancja
klasy.
Spos坦b uruchomienia metody klasowej jest
identyczny jak metody statycznej, jednak w
kontekcie wywoania posiadamy informacj o
obiekcie wywoujcym (klasie).
Aby zmieni metod zwyk w metod statyczn
nale甜y u甜y dekoratora @classmethod.
W odr坦甜nieniu od zwykej metody jej pierwszy
argument nazywany jest cls (a nie self).
5. Metody klasowe - zadanie
Stw坦rz klas ColorPrinter kt坦ra rozszerzy klas Printer i dokonaj nastpujcych modyfikacji:
ColorPrinter zu甜ywa wycznie 0.05 tuszu na ka甜de 100 znak坦w
dodaj metod get_type, kt坦ra w zale甜noci od typu drukarki wywietli stosowny komunikat: My type is
Printer lub My type is ColorPrinter
Zmie typ obiektu printer_2 na ColorPrinter
Wywoaj metod get_type na obu drukarkach
6. Metody magiczne
Metody magiczne nie maj tak naprawd nic
wsp坦lnego z magi, ani te甜 z czarami.
Magiczno tych metod opiera si na tym, 甜e nie
wywoujemy ich bezporednio w kodzie, a i tak
uruchamiajsi w odpowiednim miejscu i
momencie w programie.
Konwencja zakada, 甜e metody zaczynajce i
koczce si podw坦jnym podkreleniem
(dunderscore) s okrelane magicznymi.
Najpopularniejsz z tych metod jest __init__, kt坦ry
uruchomiony zostanie automatycznie po wpisaniu
przykadowego polecania a = A().
9. Metody magiczne - zadanie
Stw坦rz klas MagicPrinter kt坦ra rozszerzy klas Printer i dokonaj nastpujcych modyfikacji:
MagicPrinter po wydrukowaniu ka甜dej strony zwiksza sw坦j poziom tuszu o 0.01
Wywoanie obiektu resetuje jego poziom tuszu do zera
Wywoanie polecenia str(printer) wywietli komunikat My type is MagicPrinter
Spraw aby por坦wnanie dw坦ch r坦甜nych obiekt坦w typu MagicPrinter zwracao wynik pozytywny (ale tylko jeli
oba obiekty s magiczne).
Utw坦rz obiekty printer_3, printer_4 typu MagicPrinter
11. Dekoratory - definicja
Dekoratory udostpniaj wygodny spos坦b na
zmian (modyfikacj) funkcji, lub metody bez
koniecznoci bezporedniego wprowadzania
zmian w ich implementacji.
W celu udekorowania funkcji/metody
wykorzystywany jest symbol @. Przykadowo
@classmethod, czy @staticmethod.
U甜ywanie dekorator坦w jest proste, jednak ich
pisanie potrafi by skomplikowane.
Najczstszym u甜yciem dekoratora jest wywoanie
dodatkowego kodu przed lub po wywoaniu funkcji
waciwej.
12. Dekoratory - przygotowanie #1
Nazwa funkcji to tylko referencja
(wskazanie) do samej funkcji -
mo甜emy mie wiele nazw na t
sam funkcj.
13. Dekoratory - przygotowanie #2
Definiowanie funkcji w obrbie
innej funkcji jest mo甜liwe tak
samo jak definiowanie zmiennych
w jej zakresie.