• Nie Znaleziono Wyników

Programowanie obiektowe

N/A
N/A
Protected

Academic year: 2021

Share "Programowanie obiektowe"

Copied!
59
0
0

Pełen tekst

(1)

Kurs rozszerzony języka Python

Wykład 2.

Marcin Młotkowski

(2)

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

(3)

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

(4)

Klasy i obiekty

Zmienne w programowaniu obiektowym Wyjątki Model obiektowy

Deklaracja klasy

Przykłady classFigura: ”””Pierwsza klasa”””

def init (self, x, y):

self.x = x

(5)

Klasy i obiekty

Zmienne w programowaniu obiektowym Wyjątki Model obiektowy

Definicja metody

classFigura, cd. definicji ...

definfo(self):

print(self.x,self.y)

defzmien(self, x, y):

self.x = x

self.y = y

(6)

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()

(7)

Klasy i obiekty

Zmienne w programowaniu obiektowym Wyjątki Model obiektowy

Dziedziczenie

classOkrag(Figura): ”””Okrag”””

def init (self):

self.x,self.y,self.r = 0, 0, 1

definfo(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, 2.0, 3.0) ...

(8)

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)

(9)

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)

(10)

Klasy i obiekty

Zmienne w programowaniu obiektowym Wyjątki Model obiektowy

Wielodziedziczenie

classSamochod:

defnaprzod(self):

classOkret:

defnaprzod(self):

classAmfibia(Samochod, Okret):

Zagadka

amf = Amfibia() amf.naprzod()

(11)

Klasy i obiekty

Zmienne w programowaniu obiektowym Wyjątki Model obiektowy

Wielodziedziczenie

classSamochod:

defnaprzod(self):

classOkret:

defnaprzod(self):

classAmfibia(Samochod, Okret): Zagadka

amf = Amfibia() amf.naprzod()

(12)

Klasy i obiekty

Zmienne w programowaniu obiektowym Wyjątki Model obiektowy

Rozwiązywanie konfliktów

Pojazd + naprzod() Samochod Amfibia Okret + naprzod() Reguła W głąb, od lewej do prawej

(13)

Klasy i obiekty

Zmienne w programowaniu obiektowym Wyjątki Model obiektowy

Równość obiektów

Operatory tożsamości obiektów

is is not

(14)

Klasy i obiekty

Zmienne w programowaniu obiektowym Wyjątki Model obiektowy

Wartość None

isinstance(None,NoneType)

(15)

Klasy i obiekty

Zmienne w programowaniu obiektowym Wyjątki Model obiektowy

Wartość None

isinstance(None,NoneType)

ifxis not None:

(16)

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

(17)

Klasy i obiekty

Zmienne w programowaniu obiektowym

Wyjątki Model obiektowy

Pola statyczne klasy

classOkrag: pi = 3.1415

def init (self):

self.r = 2.71

defpole(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)

(18)

Klasy i obiekty

Zmienne w programowaniu obiektowym

Wyjątki Model obiektowy

Pola statyczne klasy

classOkrag: pi = 3.1415

def init (self):

self.r = 2.71

defpole(self):

print(”Pole okręgu = %i” % (Okrag.pi * self.r **2 )) Odwołanie do pól statycznych klasy

print(Okrag.pi) o = Okrag()

(19)

Klasy i obiekty

Zmienne w programowaniu obiektowym

Wyjątki Model obiektowy

Pola obiektu

classOkrag: pi = 3.1415 self.x, self.y = 0, 0 def init (self):

self.x,self.y = 0, 0

(20)

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()

(21)

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”

(22)

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()

(23)

Klasy i obiekty

Zmienne w programowaniu obiektowym

Wyjątki Model obiektowy

Zmienne

Fakt 2.

Zmienne można usuwać dynamicznie

Przykład x =’x’ delx

(24)

Klasy i obiekty

Zmienne w programowaniu obiektowym

Wyjątki Model obiektowy

Zmienne

Fakt 2.

Zmienne można usuwać dynamicznie Przykład

x =’x’ delx

(25)

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

(26)

Klasy i obiekty

Zmienne w programowaniu obiektowym

Wyjątki Model obiektowy

Metody statyczne i metody klasy

classKlasa: @staticmethod defdodawanie(a, b): returna + b @classmethod defutworz(cls): returncls()

(27)

Klasy i obiekty

Zmienne w programowaniu obiektowym

Wyjątki Model obiektowy

Czysta metoda klasy

classKlasa:

defdodawanie(a, b):

returna + b

Obiekt tej metody nie może wywołać.

(28)

Klasy i obiekty

Zmienne w programowaniu obiektowym

Wyjątki Model obiektowy

Przykład z https://realpython.com/blog/python

classPizza:

def init (self, ingredients): self.ingredients = ingredients

@classmethod

defmargherita(cls):

returncls([’mozzarella’,’tomatoes’])

@classmethod

defprosciutto(cls):

(29)

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

(30)

Klasy i obiekty Zmienne w programowaniu obiektowym

Wyjątki

Model obiektowy

Wyjątki

Mechanizm przepływu sterowania

(31)

Klasy i obiekty Zmienne w programowaniu obiektowym

Wyjątki

Model obiektowy

Wyjątki

Mechanizm przepływu sterowania Wyjątki to obiekty

(32)

Klasy i obiekty Zmienne w programowaniu obiektowym

Wyjątki

Model obiektowy

Obsługa wyjątków

try:

f = open(”plik”[10] +”.py”,”r”)

exceptIOError:

print(”Błąd wejścia/wyjścia”)

exceptIndexErrorasx:

print(x)

except:

print(”Nieznany wyjątek”)

finally: f.close()

(33)

Klasy i obiekty Zmienne w programowaniu obiektowym

Wyjątki Model obiektowy

Klauzula

else

try: print2/n except:

print(”Nieudane dzielenie”)

else:

print(”Udane dzielenie”)

(34)

Klasy i obiekty Zmienne w programowaniu obiektowym

Wyjątki

Model obiektowy

Zgłaszanie wyjątków

raise

(35)

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

(36)

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

(37)

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’>, )

(38)

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’>, )

(39)

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ę.

(40)

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

classUniwersalna(object):

Implementacja dostępu do atrybutów

def getattr (self, name):

print(”Odwołujesz się do atrybutu”, name)

returnself

def setattr (self, name, val):

print(”Przypisanie %s wartości %s” % (name, val)) Wszystkie metody

def call (self, *args):

(41)

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

classUniwersalna(object):

Implementacja dostępu do atrybutów

def getattr (self, name):

print(”Odwołujesz się do atrybutu”, name)

returnself

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)

(42)

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

classUniwersalna(object):

Implementacja dostępu do atrybutów

def getattr (self, name):

print(”Odwołujesz się do atrybutu”, name)

returnself

def setattr (self, name, val):

print(”Przypisanie %s wartości %s” % (name, val)) Wszystkie metody

def call (self, *args):

(43)

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]) v2 = Vector([0, 1, 0]) v3 = v1 + v2 str(Vector([0, 0 1])): <0, 0, 1> len(Vector([0, 0 1])): 3

(44)

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

classVector:

def init (self, lista):

self.value = lista

Implementacja dodawania

def add (self, arg):

ifself. class <> arg. class or

len(self.value) <> len(arg.value):

returnNone

res = Vector( [x + yforx, y in zip(self.value, arg.value) ])

(45)

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

classVector:

def init (self, lista):

self.value = lista Implementacja dodawania

def add (self, arg):

ifself. class <> arg. class or

len(self.value) <> len(arg.value):

returnNone

res = Vector( [x + yforx, y in zip(self.value, arg.value) ])

returnres

(46)

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])

(47)

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.

(48)

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>

classVector

def str (self):

return’<’ +’, ’.join([str(x)forxin self.value]) + ’>’

>>> print(Vector([1,2,3])) <1, 2, 3>

(49)

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>

classVector

def str (self):

return’<’ +’, ’.join([str(x)forxin self.value]) + ’>’

>>> print(Vector([1,2,3])) <1, 2, 3>

(50)

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>

classVector

def str (self):

return’<’ +’, ’.join([str(x)forxin self.value]) + ’>’

>>> print(Vector([1,2,3])) <1, 2, 3>

(51)

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

(52)

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):

returnself.value[index]

def setitem (self, index, value):

self.value[index] = value Zastosowanie

>>> print(v1[k]) >>> v1[k] = k

(53)

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 pomocadel

def delitem (self, index):

delself.value[index]

Długość kolekcji: len def len (self):

returnlen(self.value)

(54)

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 pomocadel

def delitem (self, index):

delself.value[index] Długość kolekcji: len

def len (self):

(55)

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

(56)

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

(57)

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]}

(58)

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

(59)

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’ inobj. dict :

print(obj.nazwa)

if” str ”indir(obj):

print(str(obj))

Cytaty

Powiązane dokumenty

Ponadto w wykonywaniu ustawowych obowiązków związanych z nadzorem i kontrolą nad przestrzeganiem przepi- sów Pb organy administracji architek- toniczno-budowlanej i organy nadzoru

– 2 years required to design mission and vehicles and launch first wave (must have highest priority). – Transit time to object is

Do prawidłowego zaprojektowania układu regulacji niezbędna jest znajomość właściwości obiektów regulacji, to znaczy zależności pomiędzy wielkościami wejściowymi i

• W zależności od automatyzowanego układu technologicznego i realizowanych przez ten układ funkcji, użytkownik przy pomocy klawiatury wybiera z pamięci sterownika stosowną

Metody określone przez klasę odwołują się do atrybutów przechowywanych w obiekcie.. Czy klasy mogą

‘&lt;opis obiektu&gt;’, który jest użyteczny przy debugowaniu – wywoływana przez repr(object). object.__str__(self) zwraca “ładny” napis – wywoływana

Funkcje i klasy dające możliwie prosty sposób wyrażania operacji na reprezentacjach przetwarzanych informacji..

Gwiezdne Wojny 1977 124 kolor Potężne Kaczory 1991 104 kolor Świat Wayne’a 1992 95 kolor.. Daniluk(Wydział Fizyki)