Programowanie obiektowe

Podobne dokumenty
Kurs rozszerzony języka Python

Pisząc kod w Pythonie na pewno już nie raz coś poszło nie tak i Shell wypisał komunikat o błędzie podobny do poniższego:

Wyjątki. try - except

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

Wstęp do programowania

Język Python (3) Język Python (3) 1/35

Programowanie i projektowanie obiektowe

Programowanie i projektowanie obiektowe

Wstęp do programowania

Środowisko programisty

Programowanie obiektowe

Wstęp do programowania

Język C++ wykład VIII

Myśl w języku Python! : nauka programowania / Allen B. Downey. Gliwice, cop Spis treści

Programowanie i projektowanie obiektowe

Programowanie obiektowe

Wyjątki. Streszczenie Celem wykładu jest omówienie tematyki wyjątków w Javie. Czas wykładu 45 minut.

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Wyjątki (exceptions)

Programowanie i projektowanie obiektowe

Klasy cd. Struktury Interfejsy Wyjątki

Język Python. Język Python 1/35

Podstawy programowania w Pythonie

Zaawansowany kurs języka Python

Dzi kuj za uwag! Spotkania z Pythonem. Cz ± 1 - podstawy - rozwi zania zada« Michaª Alichniewicz. Gda«sk Studenckie Koªo Automatyków SKALP

Obsługa błędów za pomocą wyjątków. Paweł Motofa (140746)

JĘZYK PYTHON - NARZĘDZIE DLA KAŻDEGO NAUKOWCA. Marcin Lewandowski [ ]

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Zaawansowany kurs języka Python


Wykład 8: Obsługa Wyjątków

Programowanie Obiektowe Ćwiczenie 4

Delphi Laboratorium 3

Programowanie obiektowe

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 7 maja K.Grzelak (Wykład 8) Programowanie w C++ 1 / 31

Zaawansowane programowanie w języku C++ Wyjątki

Programowanie w C++ Wykład 6. Katarzyna Grzelak. kwiecień K.Grzelak (Wykład 6) Programowanie w C++ 1 / 40

System operacyjny Linux

Podstawy programowania. rozdział 8: WYJĄTKI. ostatnia modyfiaaja:

Środowisko programisty

Programowanie i projektowanie obiektowe

Podstawy. Jan Koprowski Politechnika Gdańska, FTiMS Informatyka Stosowana

EPI: Interfejs Graficzny 2011/2012 Laboratorium nr 2 Programowanie obiektowe

Wstęp do programowania

Programowanie i projektowanie obiektowe

Język programowania: Lista instrukcji (IL Instruction List)

Wykład 2 Programowanie zorientowane obiektowo w Pythonie

Wstęp do programowania

1 Kursory 1. 2 Wyjątki Wyjątki predefiniowane Wyjątki niezdefiniowane wcześniej Definiowanie własnych wyjątków...

Oracle PL/SQL. Paweł Rajba.

Języki i metody programowania Java INF302W Wykład 3 (część 1)

Języki i metody programowania

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

WYJĄTKI. Jest ona jednak czasochłonna i prowadzi do duŝego zapotrzebowania na zasoby systemu.

XML extensible Markup Language 7

Programowanie w Sieci Internet. Python: Operacje z plikami oraz obsługa wyjątków

Dekoratora używa się wstawiając linijkę zaczynającą się przed definicją dekorowanego obiektu (klasy czy funkcji).

Hackowanie zamrożonych binariów

2. Składnia Pythona. Robert Janczewski. Gdańsk, 2014

Wyjątki Monika Wrzosek (IM UG) Programowanie obiektowe 180 / 196

Kurs programowania. Wykład 3. Wojciech Macyna. 22 marca 2019

Dawid Gierszewski Adam Hanasko

Podstawy i języki programowania

Oracle PL/SQL. Paweł Rajba.

Wstęp do programowania

Python wstęp do programowania dla użytkowników WCSS

Języki i metody programowania

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Wyjątki. Wyjątki. Bogdan Kreczmer. Katedra Cybernetyki i Robotyki Politechnika Wrocławska

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

Aplikacje w środowisku Java

Throwable. Wyjatek_1(int x_) { x = x_; } int podaj_x()

Spis treści. Dekoratory. 1 Dekoratory 1.1 Zadanie Zadanie Zadanie Zadanie 4

Wstęp do programowania

Programowanie robota mobilnego E-puck w języku Python

Instrukcje. Operatory. Operatory. Instrukcje sterujące. wyrażenie1 && wyrażenie2 ;

C# 6.0 : kompletny przewodnik dla praktyków / Mark Michaelis, Eric Lippert. Gliwice, cop Spis treści

Zaawansowany kurs języka Python

DECLARE <nazwa_zmiennej> typ [(<rozmiar> )] [ NOT NULL ] [ { := DEFAULT } <wartość> ];

Programowanie obiektowe

Kurs rozszerzony języka Python

Liczby losowe i pętla while w języku Python

Programowanie obiektowe

Paweł Rajba

Programista samouk : profesjonalny przewodnik do samodzielnej nauki kodowania / Cory Althoff. Gliwice, copyright Spis treści

Wstęp do programowania

Podstawy programowania. Wykład Pętle. Tablice. Krzysztof Banaś Podstawy programowania 1

Właściwości i metody obiektu Comment Właściwości

Programowanie obiektowe i zdarzeniowe wykład 4 Kompozycja, kolekcje, wiązanie danych

Zaawansowany kurs języka Python

Język PL/SQL. Rozdział 3. Obsługa błędów wykonania Wyjątki predefiniowane i użytkownika, zgłaszanie i obsługa wyjątków.

Kurs języka Python. Wykład 11. Marcin Młotkowski. 4 stycznia Kontrola poprawności podczas biegu programu. 2 Testowanie oprogramowania

Przegląd języka Python. Łukasz Anwajler

Listy, krotki, słowniki, funkcje

Notatka Aplikacyjna NA 03006PL Maj 2016

Java: kilka brakujących szczegółów i uniwersalna nadklasa Object

Kurs WWW. Paweł Rajba.

Programowanie w języku C++ Grażyna Koba

Programowanie współbieżne Zadanie 5 - Podstawowe problemy programowania współbieżnego

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Transkrypt:

Programowanie obiektowe Wyjątki, metody specjalne, generatory Paweł Daniluk Wydział Fizyki Jesień 2015 P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 1 / 23

Wyjątki It s easier to ask forgiveness than it is to get permission. Co zrobić, jeżeli podczas wykonania programu zajdzie nietypowa sytuacja, która wykracza poza założony scenariusz? Dwie możliwości 1 Sprawdzać przed każdym krokiem, czy można go wykonać. 2 Poczekać, aż wystąpi problem i wtedy go obsłużyć. Drugi wariant pozwala na rozdzielenie miejsca, gdzie problem występuje, od miejsca gdzie jest obsługiwany. P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 2 / 23

Idea Rzucanie W momencie wystąpienia sytuacji nietypowej jest tworzony i rzucany wyjątek. Przechwytywanie W miejscu, gdzie jest możliwe obsłużenie błędu wyjątek jest przechwytywany. P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 3 / 23

Bez wyjątków def c z y t a j 1 ( f ) : l i n e=f. r e a d l i n e ( ) i f l i n e== : # k o n i e c p l i k u r e t u r n ( None, EOF ) e l s e : r e t u r n (A( l i n e ), OK ) def c z y t a j 2 ( f ) :... def c z y t a j ( f ) : done=f a l s e w h i l e not done : ( resa, s t a t u s )= c z y t a j 1 ( f ) i f s t a t u s== EOF : r e t u r n ( None, EOF ) ( resb, s t a t u s )= c z y t a j 2 ( f ) i f s t a t u s== EOF : r e t u r n ( None, EOF ) r e s. e x t e n d ( ( resa, resb ) ) done=p r z e t w o r z ( resa, resb ) r e t u r n ( r e s, OK ) P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 4 / 23

Bez wyjątków c.d. def main ( ) : f =... ( r e s, s t a t u s )= c z y t a j ( f ) i f s t a t u s== EOF : p r i n t " Blad " e l s e : p r i n t OK P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 5 / 23

Z wyjątkami c l a s s EOFException ( E x c e p t i o n ) : pass def c z y t a j 1 ( f ) : l i n e=f. r e a d l i n e ( ) i f l i n e== : # k o n i e c p l i k u r a i s e EOFException ( ) r e t u r n A( l i n e ) def c z y t a j 2 ( f ) :... def c z y t a j ( f ) : done=f a l s e w h i l e not done : resa=c z y t a j 1 ( f ) resb=c z y t a j 2 ( f ) r e s. e x t e n d ( ( resa, resb ) ) done=p r z e t w o r z ( resa, resb ) r e t u r n ( r e s ) P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 6 / 23

Z wyjątkami c.d. def main ( ) : f =... t r y : r e s=c z y t a j ( f ) p r i n t OK except EOFException : p r i n t " Blad " P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 7 / 23

Co się może zdarzyć błędy arytmetyczne (dzielenie przez 0, pierwiastek z liczby ujemnej) pusta lista brak klucza w słowniku błędne dane na wejściu brak pliku, zła nazwa wyjście poza zakres... P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 8 / 23

Przechwytywanie wyjątków Instrukcja try t r y : f=open (... ) dosomething (... ) # kod, k t o r y moze wygenerowac w y j a t e k except E x c e p t i o n 1 as e : p r o c e s s _ e x c e p t i o n ( e ) # przechwycono w y j a t e k k l a s y E x c e p t i o n except E x c e p t i o n 2 : p r i n t " Olaboga!!! " # przechwycono w y j a t e k k l a s y E x c e p t i o n 2 e l s e : j e s t S u p e r ( ) # n i e w y s t a p i l zaden w y j a t e k f i n a l l y : f. c l o s e ( ) # n i e z a l e z n i e co s i e s t a l o t r z e b a p o s p r z a t a c Wyjątek jest przechwytywany przez najgłębiej zagnieżdżoną istrukcję try, która ma pasującą klauzulę except. Catch only what you can handle. P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 9 / 23

Przykład Brak klucza w słowniku i f k in d : return d [ k ] e l s e : return None t r y : return d [ k ] except KeyError : return None P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 10 / 23

Wyjątki standardowe ArithmeticError nadklasa obejmująca wyjątki związane z błędami numerycznymi AssertionError niespełniona asercja w instrukcji assert AttributeError brak atrybutu IndexError brak elementu o podanym indeksie KeyError brak klucza w słowniku NameError brak zmiennej NotImplementedError nie zaimplementowana funkcjonalność OverflowError przepełnienie StopIteration koniec iteracji (podnoszony w metodzie next() iteratora) ZeroDivisionError dzielenie przez 0 P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 11 / 23

Podnoszenie wyjątku W wielu sytuacjach wyjątek jest podnoszony samoczynnie (np. przez metody biblioteki standardowej). Instrukcja raise r a i s e MyException ( " Message ", data ) Własne wyjątki Można definiować własne wyjątki. Muszą one dziedziczyć z klasy Exception. c l a s s MyException ( E x c e p t i o n ) : d e f init ( s e l f, message, data ) : s e l f. message, s e l f. data=message, data d e f str ( s e l f ) : r e t u r n message+ : : +s t r ( data ) P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 12 / 23

Metody specjalne W Pythonie obiekty mogą mieć metody, które są wywoływane przy użyciu specjalnej składni. Przykładem jest metoda init, która jest wywoływana automatycznie po stworzeniu obiektu. P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 13 / 23

Zamiana na napis object. repr (self) zwraca reprezentację obiektu, która jest zgodna ze składnią Pythona, lub jeśli to niemożliwe napis postaci <opis obiektu>, który jest użyteczny przy debugowaniu wywoływana przez repr(object) object. str (self) zwraca ładny napis wywoływana przez str(object) P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 14 / 23

Kontenery object. len (self) liczba elementów wywoływana przez len(object) object. getitem (self, key) pobieranie wartości wywoływana przez object[key] object. setitem (self, key, value) zmiana wywoływana przez object[key]=value object. delitem (self, key) usuwanie wywoływana przez del object[key] object. iter (self) iterator object. reversed (self) iterator iterujący w przeciwnym kierunku wywoływana przez reversed(object) object. contains (self, item) zawieranie wywoływana przez item in object P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 15 / 23

Operacje arytmetyczne object. add (self, other) object + other object. sub (self, other) object - other object. mul (self, other) object * other object. div (self, other) object / other object. floordiv (self, other) object // other object. mod (self, other) object % other object. divmod (self, other) divmod(object, other) object. pow (self, other) object ** other object. lshift (self, other) object << other object. rshift (self, other) object >> other object. and (self, other) object & other object. xor (self, other) object ˆ other object. or (self, other) object other P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 16 / 23

Operacje arytmetyczne c.d. object. neg (self) -object object. pos (self) +object object. abs (self) abs(object) object. invert (self) object P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 17 / 23

Porównywanie object. lt (self, other) object. le (self, other) object. eq (self, other) object. ne (self, other) object. gt (self, other) object. ge (self, other) object < other object <= other object == other object!= other object > other object >= other object. cmp (self, other) zwraca wartość ujemną jeżeli object < other, zero jeżeli object==other i liczbę dodatnią jeżeli object > other P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 18 / 23

Generatory Problem Jak napisać funkcję (metodę), która oblicza i zwraca wiele (dowolnie wiele) wartości? Można zwracać listę, ale to nie rozwiązuje problemu nieograniczonej liczby wyników. Dodatkowo jest czasochłonne. Idealnym rozwiązaniem byłaby funkcja, która może wielokrotnie wykonać instrukcję return. Przykład (życzeniowy) def kwadraty ( s t a r t ) : n=s t a r t w h i l e True : r e t u r n n n n += 1 P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 19 / 23

Generatory c.d. Trzeba jakoś pamiętać stan funkcji i ją wznawiać. Można to emulować definiując odpowiednią klasę. c l a s s Kwadraty : d e f init ( s e l f, s t a r t ) : s e l f. n = s t a r t d e f next ( s e l f ) : r e s = s e l f. n s e l f. n += 1 r e t u r n r e s s e l f. n k = Kwadraty ( 5 ) f o r i i n range ( 3 ) : p r i n t k. next ( ) P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 20 / 23

Generatory c.d. Python ma magiczną instrukcję yield, która znacząco upraszcza sytuację. d ef kwadraty ( s t a r t ) : n = s t a r t w h i l e True : y i e l d n n n += 1 k = kwadraty ( 5 ) # k j e s t i n s t a n c j a g e n e r a t o r a f o r i i n range ( 3 ) : p r i n t k. next ( ) P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 21 / 23

Generatory c.d. Każda funkcja zawierająca instrukcję yield zwraca instancję generatora. Taka funkcja może mieć wyłącznie bezargumentowe instrukcje return, które kończą pracę generatora wyjątkiem StopIteration. Generatory doskonale nadają się do implementowania iteratorów, ponieważ mają metody iter () i next(). Generatory mają również metody send(value), throw(exception) i close(), które służą do przesyłania danych do generatora i podnoszenia w nim wyjątków. P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 22 / 23

Coroutines i m p o r t random d e f get_data ( ) : """ R e t u r n 3 random i n t e g e r s between 0 and 9 """ r e t u r n random. s ample ( r a n g e ( 1 0 ), 3) d e f consume ( ) : """ D i s p l a y s a r u n n i n g a v e r a g e a c r o s s l i s t s o f i n t e g e r s s e n t t o i t """ running_sum = 0 data_items_seen = 0 w h i l e True : d a t a = y i e l d data_items_seen += l e n ( d a t a ) running_sum += sum ( d a t a ) p r i n t ( The r u n n i n g a v e r a g e i s {}. f o r m a t ( running_sum / f l o a t ( data_items_seen d e f p r o d u c e ( consumer ) : """ P r o d u c e s a s e t o f v a l u e s and f o r w a r d s them t o t h e pre d e f i n e d consumer f u n c t i w h i l e True : data = get_data ( ) p r i n t ( Produced {}. f o r m a t ( d a t a ) ) consumer. s e n d ( d a t a ) y i e l d i f name == main : consumer = consume ( ) consumer. s e n d ( None ) producer = produce ( consumer ) f o r _ i n r a n g e ( 1 0 ) : p r i n t ( P r o d u c i n g... ) n e x t ( p r o d u c e r ) P. Daniluk (Wydział Fizyki) PO w. VII Jesień 2015 23 / 23