Środowisko programisty 1/35 Środowisko programisty Język Python cz. 3 dr inż. Grzegorz Michalski 7 kwietnia 2014
Środowisko programisty 2/35 Kod samotestujący Tworzenie def t e s t e r ( ) : p r i n t " W y w o a n i e funkcji testujacych..." i f name == main : t e s t e r ( )
Środowisko programisty 3/35 Podstawy klas Pojęcia podstawowe instrukcja class tworzy obiekt klasy i przypisuje mu nazwę przypisania wewnątrz instrukcji class tworzą atrybuty klasy atrybuty klasy eksportują stan i zachowanie obiektu wywołanie obiektu klasy tworzy nowy egzemplarz obiektu każdy egzemplarz obiektu otrzymuje atrybuty klasy oraz swoją przestrzeń nazw przypisania do siebie w metodach tworzą atrybuty danego egzemplarza
Środowisko programisty 4/35 Podstawy klas przykład (1) Tworzenie klasy c l a s s Klasa1 : def p r z y p i s z ( s e l f, w a r t o s c ) : s e l f. dane = w a r t o s c def w y p i s z ( s e l f ) : p r i n t s e l f. dane Obiekty klasy x = Klasa1 ( ) y = Klasa1 ( ) x. p r z y p i s z ( "napis" ) y. p r z y p i s z ( 1 2 3. 4 5 6 )
Środowisko programisty 5/35 Podstawy klas przykład (2) >>> x. w y p i s z ( ) n a p i s >>> y. w y p i s z ( ) 123.456 >>> x. dane = " nowy napis" >>> x. w y p i s z ( ) nowy n a p i s >>> y. w y p i s z ( ) 123.456
Środowisko programisty 6/35 Dziedziczenie klas W nagłówku klasy podawane są w nawiasach klasy nadrzędne. Klasy dziedziczą atrybuty ze swoich klas nadrzędnych. Egzemplarze klas przejmują atrybuty ze wszystkich dostępnych klas. Zmiany działania są realizowane za pomocą wprowadzania klas podrzędnych, a nie przez modyfikacje klas nadrzędnych.
Środowisko programisty 7/35 Dziedziczenie klas - przykład Definicja c l a s s Klasa2 ( Klasa1 ) : def w y p i s z ( s e l f ) : p r i n t Obecne dane = "%s" % s e l f. dane Wykorzystanie >>> z = Klasa2 ( ) >>> z. p r z y p i s z (42) >>> z. w y p i s z ( ) Obecne dane = " 42" >>> x. w y p i s z ( ) nowy n a p i s
Środowisko programisty 8/35 Klasy mogą przesłaniać operatory języka Python Metody o nazwach w rodzaju nazwa są specjalnymi punktami zaczepienia. Takie metody są wywoływane automatycznie, gdy język Python rozwija operatory. Klasy mogą zastępować większość wbudowanych operacji na typach. Operatory pozwalają na integrację klas z modelem obiektowym języka Python.
Środowisko programisty 9/35 Przesłanianie operatorów (1) Metoda Przeciąża Wywołanie init Konstruktor Tworzenie obiektu: Class() del Destruktor Zwolnienie obiektu add Operator + X + Y or Operator X Y call Wywołania X() funkcji repr Drukowania, print X przekształcenia getattr Kwalifikacja X.niezdefiniowany getitem Indeksowanie X[i], w pętli for, testach setitem Przypisanie indeksowane X[i] = war
Środowisko programisty 10/35 Przesłanianie operatorów (2) Metoda Przeciąża Wywołanie getslice Wycinanie X[a:b] len Długość len(x) cmp Porównanie X == Y radd Prawostronny operator + Nieegzemplarz + X
Środowisko programisty 11/35 Przesłanianie operatorów przykład (1) c l a s s Klasa3 ( Klasa2 ) : def i n i t ( s e l f, w a r t o s c ) : s e l f. dane = w a r t o s c def a d d ( s e l f, w a r t o s c ) : return Klasa3 ( s e l f. dane + w a r t o s c ) def m u l ( s e l f, w a r t o s c ) : s e l f. dane = s e l f. dane w a r t o s c
Środowisko programisty 12/35 Przesłanianie operatorów przykład (2) >>> a = Klasa3 ( "abc" ) >>> a. w y p i s z ( ) Obecne dane = " abc" >>> b = a + xyz >>> b. w y p i s z ( ) Obecne dane = " abcxyz" >>> a 3 >>> a. w y p i s z ( ) Obecne dane = " abcabcabc" >>> a. m u l ( 2 ) >>> a. w y p i s z ( ) Obecne dane = " abcabcabcabcabcabc"
Środowisko programisty 13/35 Instrukcje klas Klasa: c l a s s Podklasa : dane = mielonka def i n i t ( s e l f, w a r t o s c ) : s e l f. dane = w a r t o s c def w y p i s z ( s e l f ) : p r i n t s e l f. dane, Podklasa. dane Wywołanie >>> x = Podklasa ( 1 ) >>> y = Podklasa ( 2 ) >>> x. w y p i s z ( ) ; y. w y p i s z ( ) 1 mielonka 2 mielonka
Środowisko programisty 14/35 Metody klas Klasa c l a s s NowaKlasa : def p r i n t e r ( s e l f, t e x t ) : p r i n t t e x t Wywołanie >>> x = NowaKlasa ( ) >>> x. p r i n t e r ( Hello world! ) H e l l o world! >>> NowaKlasa. p r i n t e r ( x, Hello world! ) H e l l o world!
Środowisko programisty 15/35 Metody dziedziczone Klasy: c l a s s Nad : def metoda ( s e l f ) : p r i n t wewnatrz Nad.metoda c l a s s Pod ( Nad ) : def metoda ( s e l f ) : p r i n t uruchamia sie Pod.metoda Nad. metoda ( s e l f ) p r i n t konczy sie Pod.metoda
Środowisko programisty 16/35 Metody dziedziczone Wywołanie >>> x = Nad ( ) >>> x. metoda ( ) wewnatrz Nad. metoda >>> x = Pod ( ) >>> x. metoda ( ) uruchamia s i e Pod. metoda wewnatrz Nad. metoda konczy s i e Pod. metoda
Środowisko programisty 17/35 Podstawy działania wyjątków Instrukcje try/except/else t r y : <i n s t r u k c j e > except <nazwa >: <i n s t r u k c j e > except <nazwa >, <dane >: <i n s t r u k c j e > e l s e : <i n s t r u k c j e > Instrukcje try/finally t r y : <i n s t r u k c j e > f i n a l l y : <i n s t r u k c j e >
Środowisko programisty 18/35 Ręczne wyzwalanie wyjątku Instrukcja raise r a i s e <nazwa> r a i s e <nazwa >, <dane>
Środowisko programisty 19/35 Komunikaty o błędach bad.py def gobad ( x, y ) : return x / y def gosouth ( x ) : p r i n t gobad ( x, 0) gosouth ( 1 ) $ python bad. py Traceback ( i n n e r m o s t l a s t ) : F i l e "bad.py", l i n e 7, i n? gosouth ( 1 ) F i l e "bad.py", l i n e 2, i n g l o b a l return x / y Z e r o D i v i s i o n E r r o r : i n t e g e r or modulo
Środowisko programisty 20/35 Przechwytywanie wyjątków def kaboom ( l i s t, n ) : p r i n t l i s t [ n ] t r y : kaboom ( [ 0, 1, 2 ], 3) except : p r i n t Hello world!
Środowisko programisty 21/35 Wyjątki zdefiniowane przez użytkownika c l a s s MyError : None def s t u f f ( f i l e ) : r a i s e MyError f i l e = open ( data, w ) t r y : s t u f f ( f i l e ) f i n a l l y : f i l e. c l o s e ( )
Środowisko programisty 22/35 Klauzule instrukcji try Postać klauzuli except: except name: except name, value: except (name1, name2): else: finally: Znaczenie Wyłapuje wszystkie rodzaje wyjątków Wyłapuje tylko określony rodzaj wyjątku Wyłapuje wyjątek i jego dane dodatkowe Wyłapuje dowolny z wpisanych wyjątków Uruchamia blok, jeśli nie pojawiły się żadne wyjątki Zawsze uruchamia blok
Środowisko programisty 23/35 Wyłapywanie jednego z N wyjątków t r y : a c t i o n ( ) except NameError :... except I n d e x E r r o r :... except KeyError :... except ( A t t r i b u t e E r r o r, TypeError, S y n t a x E r r o r ) :...
Środowisko programisty 24/35 Zagnieżdżone bloki try nested.py def a c t i o n 2 ( ) : p r i n t 1 + [ ] def a c t i o n 1 ( ) : t r y : a c t i o n 2 ( ) except TypeError : p r i n t inner try t r y : a c t i o n 1 ( ) except TypeError : p r i n t outer try inner try
Środowisko programisty 25/35 Wbudowane wyjątki Nazwa wyjątku Exception ArithmeticError AssertionError AttributeError EOFError IOError ImportError KeyError Opis Wbudowany wyjątek bazowy Wyjątek obejmujący błędy dotyczące obliczeń Zgłaszany przez instrukcję assert Zgłaszany w przypadku niedopasowanej listy argumentów Zgłaszany przez raw input w przypadku napotkania końca pliku Zgłaszany w przypadku błędu operacji wejścia/wyjścia, np. próby otwarcia pliku Zgłaszany w przypadku niepowodzenia próby importu modułu Zgłaszany przez słownik, w przypadku próby odczytu nieistniejącego klucza
Informacje dodatkowe Przekazywanie opcjonalnych danych (mojwyjatek.py) c l a s s mojwyjatek : def i n i t ( s e l f, a ) : s e l f. n a p i s = a def r e p r ( s e l f ) : return s e l f. n a p i s def f u n k c j a ( ) : r a i s e mojwyjatek, "hello" t r y : f u n k c j a ( ) except mojwyjatek, i n f o p r i n t opis:, i n f o $./mojwyjatek.py opis: hello Środowisko programisty 26/35
Środowisko programisty 27/35 Moduł os Nazwa funkcji getcwd() listdir(s) chown(s, uid, gid) chmod(s, t) rename(src, dest) remove(s) rmdir(s) mkdir(s) system(p) Działanie Zwraca łańcuch z bieżącym katalogiem Zwraca listę plików z katalogu Zmienia właściciela pliku Zmienia uprawnienia do pliku Zmienia nazwę pliku Usuwa plik Usuwa katalog Tworzy katalog Wywołuje polecenie systemowe s łańcuch tekstowy ze ścieżką p łańcuch tekstowy z poleceniem t liczba określające uprawnienia
Środowisko programisty 28/35 Atrybuty łańcuchowe modułu os Nazwa atrybutu curdir pardir sep altsep pathsep Znaczenie Bieżący katalog Katalog nadrzędny Znak rozdzielający elementy ścieżki Alternatywny znak rozdzielający elementy ścieżki Znak rozdzielający ścieżki >>> os. c u r d i r. >>> os. p a r d i r.. >>> os. sep / >>> os. a l t s e p >>> os. pathsep :
Środowisko programisty 29/35 Funkcje modułu os.path Nazwa funkcji split(s) join(s,..) exists(s) expandvars(s) expanduser(s) isfile(s) isdir(s) islink(s) normpath(s) normcase(s) Działanie Dzieli ścieżkę na parę zawierającą początek i koniec Łączy składniki ścieżki Zwraca prawdę, jeśli ścieżka istnieje Rozwija argument za pomocą zmiennych systemowych Przekształca ścieżkę wykorzystując znak Sprawdza czy s jest plikiem Sprawdza czy s jest katalogiem Sprawdza czy s jest dowiązaniem Normalizuje ścieżkę Normalizuje ścieżkę
Środowisko programisty 30/35 Funkcje modułu os.path >>> import o s >>> os. getcwd ( ) /home/staff >>> os. path. s p l i t ( os. getcwd ( ) ) ( /home, staff ) >>> os. path. j o i n ( os. getcwd ( ), tmp ) /home/staff/tmp >>> os. path. expanduser ( ~ ) /home/staff >>> os. path. e x p a n d v a r s ( $TMP ) $TMP >>> os. path. e x p a n d v a r s ( $HOME ) /home/staff >>> os. path. i s d i r ( os. getcwd ( ) ) True >>> os. path. i s f i l e ( os. getcwd ( ) ) F a l s e
Środowisko programisty 31/35 Moduł shutil Nazwa funkcji copyfile(src, dst) copymode(src, dst) copystat(src, dst) copy(src, dst) copy2(src, dst) copytree(src, dst, sym=0) rmtree(s) Działanie Tworzy kopię pliku Kopiuje informacje o atrybutach Kopiuje informacje o stanie Tworzy kopię pliku i kopiuje informacje o atrybutach Tworzy kopię pliku i kopiuje informacje o stanie Kopiuje rekurencyjnie katalog Usuwa rekurencyjnie katalog
Środowisko programisty 32/35 Moduł csv Przykład odczytu import c s v r e a d e r = c s v. r e a d e r ( open ( "passwd", "rb" ), d e l i m i t e r= :, q u o t i n g=c s v.quote NONE) f o r row i n r e a d e r : p r i n t row Przykład zapisu import c s v w r i t e r = c s v. w r i t e r ( open ( "some.csv", "wb" ) ) w r i t e r. w r i t e r o w s ( s o m e i t e r a b l e )
Środowisko programisty 33/35 Dokumentacja kodu z wykorzystaniem doctest dc.py def sumuj ( a, b ) : Funkcja zwraca sume argumentow P r z y k l a d : >>> sumuj ( 2, 3) 5 >>> sumuj ( ab, cd ) abcd return a +b i f name == " main " : import d o c t e s t d o c t e s t. testmod ( )
Środowisko programisty 34/35 Tworzenie dokumentacji $ pydoc dc Help on module dc: NAME dc FILE /tmp/dc.py FUNCTIONS sumuj(a, b) Funkcja zwraca sume argumentow Przyklad: >>> sumuj(2, 3) 5 >>> sumuj( ab, cd ) abcd
Środowisko programisty 35/35 W wykładzie wykorzystano materiały The Python Tutorial, http://docs.python.org/tutorial/index.html Mark Lutz, David Ascher, Python. Wprowadzenie, Helion, 2002