際際滷

際際滷Share a Scribd company logo
Programowanie obiektowe
Metody statyczne, klasowe, magiczne oraz
dekoratory
Kamil Rykowski
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.
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.
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).
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
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().
Metody magiczne - __str__ i __len__
Metody magiczne - __call__ i __eq__
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
Dekoratory
Od dekorowania tortu do udekorowanego
kodu
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.
Dekoratory - przygotowanie #1
Nazwa funkcji to tylko referencja
(wskazanie) do samej funkcji -
mo甜emy mie wiele nazw na t
sam funkcj.
Dekoratory - przygotowanie #2
Definiowanie funkcji w obrbie
innej funkcji jest mo甜liwe tak
samo jak definiowanie zmiennych
w jej zakresie.
Dekoratory - przygotowanie #3
Przekazywanie funkcji jako
parametru do innej funkcji
Dekoratory - przygotowanie #4
Funkcja mo甜e zwr坦ci inn
funkcj, kt坦ra bdzie miaa
dostp do zakresu funkcji
opakowujcej (tzw. closure)
Dekoratory - implementacja
STX Next
kamil.rykowski@gmail.com
Kamil Rykowski
Pytania

More Related Content

PyLadies #2

  • 1. Programowanie obiektowe Metody statyczne, klasowe, magiczne oraz dekoratory Kamil Rykowski
  • 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().
  • 7. Metody magiczne - __str__ i __len__
  • 8. Metody magiczne - __call__ i __eq__
  • 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
  • 10. Dekoratory Od dekorowania tortu do udekorowanego kodu
  • 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.
  • 14. Dekoratory - przygotowanie #3 Przekazywanie funkcji jako parametru do innej funkcji
  • 15. Dekoratory - przygotowanie #4 Funkcja mo甜e zwr坦ci inn funkcj, kt坦ra bdzie miaa dostp do zakresu funkcji opakowujcej (tzw. closure)