Zaawansowany kurs jezyka Python

Transkrypt

Zaawansowany kurs jezyka Python
Zaawansowany kurs języka Python
Wykład 2.
Marcin Młotkowski
6 października 2011
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Plan wykładu
1
Klasy i obiekty
2
Zmienne w programowaniu obiektowym
3
Wyjątki
4
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Deklaracja klasy
Przykłady
class Figura:
”””Pierwsza klasa”””
def init (self, x, y):
self.x = x
self.y = y
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Definicja metody
class Figura, cd. definicji
...
def info(self):
print(self.x, self.y)
def zmien(self, x, y):
self.x = x
self.y = y
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Tworzenie obiektów i wywołanie metod
Przykład
o = Figura(1, -1)
o.info()
o.zmien(2,3)
o.info()
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Dziedziczenie
class Okrag(Figura):
”””Okrag”””
def init (self):
self.x, self.y, self.r = 0, 0, 1
def info(self):
print(’x = %i, y = %i, r = %i’ % (self.x, self.y, self.r))
Wywołanie konstruktora z nadklasy
def
init (self):
Figura. init (self)
...
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Metody wirtualne
Class Figura
def info(self):
...
def przesun(self, dx, dy):
self.info()
self.x, self.y = self.x + dx, self.y + dy
self.info()
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Metody wirtualne
Class Figura
def info(self):
...
def przesun(self, dx, dy):
self.info()
self.x, self.y = self.x + dx, self.y + dy
self.info()
okrag = Okrag();
okrag.przesun(10,15)
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Wielodziedziczenie
class Samochod:
def naprzod(self):
class Okret:
def naprzod(self):
class Amfibia(Samochod, Okret):
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Wielodziedziczenie
class Samochod:
def naprzod(self):
class Okret:
def naprzod(self):
class Amfibia(Samochod, Okret):
Zagadka
amf = Amfibia()
amf.naprzod()
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Rozwiązywanie konfliktów
Pojazd
+ naprzod()
Okret
Samochod
+ naprzod()
Amfibia
Reguła
W głąb, od lewej do prawej
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Plan wykładu
1
Klasy i obiekty
2
Zmienne w programowaniu obiektowym
3
Wyjątki
4
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Pola statyczne klasy
class Okrag:
pi = 3.1415
def __init__(self):
self.r = 2.71
def pole(self):
print( ”Pole okręgu = %i” % (Okrag.pi * self.r **2 ))
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Pola statyczne klasy
class Okrag:
pi = 3.1415
def __init__(self):
self.r = 2.71
def pole(self):
print( ”Pole okręgu = %i” % (Okrag.pi * self.r **2 ))
Odwołanie do pól statycznych klasy
print(Okrag.pi)
o = Okrag()
print(o.pi)
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Pola obiektu
class Okrag:
pi = 3.1415
self.x, self.y = 0, 0
def __init__(self):
self.x, self.y = 0, 0
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Zmienne
Fakt 1.
Zmienne można dodawać dynamicznie
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Zmienne
Fakt 1.
Zmienne można dodawać dynamicznie
Nowa zmienna modułu
modul.nowa zmienna = ’Nowa zmienna’
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Zmienne
Fakt 1.
Zmienne można dodawać dynamicznie
Nowa zmienna modułu
modul.nowa zmienna = ’Nowa zmienna’
Nowa zmienna obiektu
o = Figura()
o.nowe pole = ”Nowe pole”
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Zmienne
Fakt 2.
Zmienne można usuwać dynamicznie
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Zmienne
Fakt 2.
Zmienne można usuwać dynamicznie
Przykład
x = ’x’
del x
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Zmienne prywatne
Zmienną prywatną jest zmienna poprzedzona dwoma
podkreśleniami i zakończona co najwyżej jednym podkreśleniem
(dotyczy modułów i klas).
Np.
__zmiennaPrywatna
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Plan wykładu
1
Klasy i obiekty
2
Zmienne w programowaniu obiektowym
3
Wyjątki
4
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Wyjątki
Mechanizm przepływu sterowania
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Wyjątki
Mechanizm przepływu sterowania
Wyjątki to obiekty
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obsługa wyjątków
try:
f = open(”plik”[10] + ”.py”, ”r”)
except IOError:
print(”Błąd wejścia/wyjścia”)
except IndexError as x:
print(x)
except:
print(”Nieznany wyjątek”)
finally:
f.close() # Dopiero od 2.5!
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obsługa wyjątków
try:
f = open(”plik”[10] + ”.py”, ”r”)
except IOError:
print(”Błąd wejścia/wyjścia”)
except IndexError, x:
print(x)
except:
print(”Nieznany wyjątek”)
finally:
f.close() # Dopiero od 2.5!
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Klauzula else
try:
print 2/n
except:
print(”Nieudane dzielenie”)
else:
print(”Udane dzielenie”)
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Zgłaszanie wyjątków
raise
raise RuntimeError(”Stało się coś złego”)
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Zgłaszanie wyjątków
raise
raise RuntimeError(”Stało się coś złego”)
raise ”Wyjątek”
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Plan wykładu
1
Klasy i obiekty
2
Zmienne w programowaniu obiektowym
3
Wyjątki
4
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Wszystko jest obiektem.
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Stary i nowy styl
Klasyczne klasy
Rozróżnienie między typami wbudowanymi i użytkownika
Klasy w nowym stylu
Brak rozróżnienia między klasami a typami
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Klasy i nadklasy obiektów
Jak sprawdzić klasę obiektu
>>> type(5)
<type ’int’>
>>> x = 5
>>> x. class
<type ’int’>
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Klasy i nadklasy obiektów
Jak sprawdzić klasę obiektu
>>> type(5)
<type ’int’>
>>> x = 5
>>> x. class
<type ’int’>
Jak sprawdzić nadklasę obiektu
<type ’int’>
>>> x = 5
>>> x. class . bases
(<type ’object’>, )
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Uniwersalny obiekt
Obiekt uniwersalny: ma wszystkie pola i implementuje dowolną
metodę.
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Implementacja uniwersalnego obiektu
Implementacja klasy
class Uniwersalna(object):
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Implementacja uniwersalnego obiektu
Implementacja klasy
class Uniwersalna(object):
Implementacja dostępu do atrybutów
def
getattr (self, name):
print (”Odwołujesz się do atrybutu”, name)
return self
def
setattr (self, name, val):
print (”Przypisanie %s wartości %s)” % (name, val))
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Implementacja uniwersalnego obiektu
Implementacja klasy
class Uniwersalna(object):
Implementacja dostępu do atrybutów
def
getattr (self, name):
print (”Odwołujesz się do atrybutu”, name)
return self
def
setattr (self, name, val):
print (”Przypisanie %s wartości %s)” % (name, val))
Wszystkie metody
def
call (self, *args):
print ”Wywołano metodę z argumentami”, args
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Zadanie
Implementacja klasy wektorów Vector:
operatory arytmetyczne
v1 = Vector([1, 0, 0])
v1 = Vector([0, 1, 0])
v3 = v1 + v2
str(Vector([0, 0 1])): <0, 0, 1>
len(Vector([0, 0 1])): 3
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Implementacja wektorów
class Vector:
def
init (self, lista):
self.value = lista
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Implementacja wektorów
class Vector:
def
init (self, lista):
self.value = lista
Implementacja dodawania
def
add (self, arg):
if self. class <> arg. class or
len(self.value) <> len(arg.value):
return None
res = Vector( [x + y for x, y in zip(self.value, arg.value) ])
return res
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Wykorzystanie
v1 = Vector([1, 0, 3])
v2 = Vector([0, 2, 0])
print v1 + v2
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Inne standardowe metody
mul — mnożenie
sub — odejmowanie
div — dzielenie
mod — reszta z dzielenia
Tak zdefiniowane operatory zachowują standardowe priorytety.
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Postać napisowa
>>> print Vector([1,2,3])
< main .Vector instance at 0xb7eabdec>
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Postać napisowa
>>> print Vector([1,2,3])
< main .Vector instance at 0xb7eabdec>
class Vector
def str (self):
return ’<’ + ’, ’.join([str(x) for x in self.value]) + ’>’
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Postać napisowa
>>> print Vector([1,2,3])
< main .Vector instance at 0xb7eabdec>
class Vector
def str (self):
return ’<’ + ’, ’.join([str(x) for x in self.value]) + ’>’
>>> print Vector([1,2,3])
<1, 2, 3>
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Własności kolekcji
Pożądane cechy kolekcji
Indeksowany dostęp do danych k[4]
Obsługa poprzez iteratory for–in
rozmiar kolekcji len
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Dostęp indeksowany
Implementacja akcesorów w klasie Vector
def
getitem (self, index):
return self.value[index]
def
setitem (self, index, value):
self.value[index] = value
Zastosowanie
>>> print v1[k]
>>> v1[k] = k
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Pozostałe własności kolekcji
Usuwanie elementu za pomoca del
def
delitem (self, index):
del self.value[index]
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Pozostałe własności kolekcji
Usuwanie elementu za pomoca del
def
delitem (self, index):
del self.value[index]
Długość kolekcji: len
def
len (self):
return len(self.value)
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Stan obiektu/modułu
’Napis’. class
Figura. doc
Figura. dict
plik. file
name
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Słowniki symboli
Zmienne (oraz nazwy funkcji) w czasie działania programu są
przechowywane w słowniku.
dir()
dict
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Funkcja standardowa dir()
Co robi dir
Zwraca listę dostępnych nazw. Jeśli nie podano argumentu, to
podaje listę symboli w lokalnym słowniku.
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Funkcja standardowa dir()
Co robi dir
Zwraca listę dostępnych nazw. Jeśli nie podano argumentu, to
podaje listę symboli w lokalnym słowniku.
>>> dir(Vector([1,2,3]))
[’ add ’, ’ cmp ’, ’ delitem ’, ’ doc ’, ’ getitem ’, ’ init ’,
’ len ’, ’ module ’, ’ setitem ’, ’ str ’, ’iter’, ’next’, ’value’]
>>> Vector([1,2]). dict
{’value’: [1, 2, 3]}
Marcin Młotkowski
Zaawansowany kurs języka Python
Klasy i obiekty
Zmienne w programowaniu obiektowym
Wyjątki
Model obiektowy
Obiekty w Pythonie
Specjalne atrybuty obiektów
Obiekty jako kolekcje
Badanie stanu obiektu — refleksje
Przydatność słowników
if ’nazwa’ in obj. dict :
print obj.nazwa
if ” str ” in dir(obj):
print dir(obj)
Marcin Młotkowski
Zaawansowany kurs języka Python

Podobne dokumenty