Kurs rozszerzony języka Python

Podobne dokumenty
Zaawansowany kurs języka Python

Programowanie obiektowe

Programowanie obiektowe

Wykład 2 Programowanie zorientowane obiektowo w Pythonie

Programowanie obiektowe

Programowanie i projektowanie obiektowe

Zaawansowany kurs języka Python

Wykład 4: Klasy i Metody

Ćwiczenie 5. Python 3: Programowanie obiektowe i dziedziczenie

Programowanie w Ruby

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

Programowanie i projektowanie obiektowe

Programowanie obiektowe

Środowisko programisty

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

Programowanie w Ruby

Język C++ wykład VIII

Programowanie w Ruby

Programowanie obiektowe

1. Które składowe klasa posiada zawsze, niezależnie od tego czy je zdefiniujemy, czy nie?

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:

Oracle PL/SQL. Paweł Rajba.

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

Kurs WWW. Paweł Rajba.

Kurs języka Python. Wykład 13. Marcin Młotkowski. 18 stycznia Rozszerzenia Pythona w C Python/C API. 2 Osadzanie Pythona w C

PARADYGMATY PROGRAMOWANIA Wykład 3

Operator przypisania. Jest czym innym niż konstruktor kopiujący!

2. Klasy cz. 2 - Konstruktor kopiujący. Pola tworzone statycznie i dynamicznie - Funkcje zaprzyjaźnione - Składowe statyczne

Programowanie obiektowe

Zaawansowany kurs języka Python

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Dziedziczenie. Tomasz Borzyszkowski

Metaprogramowanie w Ruby

Polimorfizm. dr Jarosław Skaruz

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

Programowanie Obiektowe i C++

Programowanie i projektowanie obiektowe

PARADYGMATY PROGRAMOWANIA Wykład 4

Informatyka I. Klasy i obiekty. Podstawy programowania obiektowego. dr inż. Andrzej Czerepicki. Politechnika Warszawska Wydział Transportu 2018

Programowanie obiektowe

Dziedziczenie. dr Jarosław Skaruz

Programowanie Obiektowe i C++

Klasy Obiekty Dziedziczenie i zaawansowane cechy Objective-C

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

Kurs rozszerzony języka Python

Wstęp do programowania

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

Polimorfizm, metody wirtualne i klasy abstrakcyjne

Dawid Gierszewski Adam Hanasko

Programowanie i projektowanie obiektowe

Materiały do zajęć VII

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Platformy Programistyczne Podstawy języka Java

Programowanie i projektowanie obiektowe

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Programowanie obiektowe

Język Python (2) Język Python (2) 1/36

Technologie cyfrowe semestr letni 2018/2019

Podstawy programowania w Pythonie

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

Dokumentacja do API Javy.

Programowanie obiektowe

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

Programowanie obiektowe

Oracle PL/SQL. Paweł Rajba.

Szablony klas, zastosowanie szablonów w programach

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

Programowanie obiektowe

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Wykład 8: klasy cz. 4

PHP 5 język obiektowy

Kurs języka Python Wykład 8. Przetwarzanie tekstu Wyrażenia regularne Biblioteka urllib Parsowanie html'a XML

Programowanie obiektowe

KOTLIN. Język programowania dla Androida

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Kurs programowania. Wstęp - wykład 0. Wojciech Macyna. 22 lutego 2016

Interfejsy. Programowanie obiektowe. Paweł Rogaliński Instytut Informatyki, Automatyki i Robotyki Politechniki Wrocławskiej

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Dziedziczenie. Streszczenie Celem wykładu jest omówienie tematyki dziedziczenia klas. Czas wykładu 45 minut.

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

Przeciążanie operatorów

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Wyjątki. try - except

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

Programowanie, część I

Programowanie obiektowe

Mechanizm dziedziczenia

Programowanie obiektowe i zdarzeniowe

Zmienne, stałe i operatory

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

Podstawy programowania. Wykład: 4. Instrukcje sterujące, operatory. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Pola i metody statyczne

Kurs rozszerzony języka Python

Podstawy Pythona. Krzysztof Gdawiec. Instytut Informatyki Uniwersytet Śląski

Wykład 5 Okna MDI i SDI, dziedziczenie

Języki i metody programowania Java Lab2 podejście obiektowe

Wykład 7: Pakiety i Interfejsy

Transkrypt:

Wykład 2. 13 października 2017

Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 4

Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 4

Deklaracja klasy Klasy i obiekty Przykłady class Figura: Pierwsza klasa def init (self, x, y): self.x = x self.y = y

Definicja metody Klasy i obiekty class Figura, cd. definicji... def info(self): print(self.x, self.y) def zmien(self, x, y): self.x = x self.y = y

Tworzenie obiektów i wywołanie metod Przykład o = Figura(1, -1) o.info() o.zmien(2,3) o.info()

Dziedziczenie Klasy i obiekty 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, 2.0, 3.0)...

Metody wirtualne Klasy i obiekty Class Figura def info(self):... def przesun(self, dx, dy): self.info() self.x, self.y = self.x + dx, self.y + dy self.info()

Metody wirtualne Klasy i obiekty 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)

Wielodziedziczenie class Samochod: def naprzod(self): class Okret: def naprzod(self): class Amfibia(Samochod, Okret):

Wielodziedziczenie class Samochod: def naprzod(self): class Okret: def naprzod(self): class Amfibia(Samochod, Okret): Zagadka amf = Amfibia() amf.naprzod()

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

Równość obiektów Operatory tożsamości obiektów is is not

Wartość None Klasy i obiekty isinstance(none, NoneType)

Wartość None Klasy i obiekty isinstance(none, NoneType) if x is not None:

Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 4

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

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)

Pola obiektu Klasy i obiekty class Okrag: pi = 3.1415 self.x, self.y = 0, 0 def init (self): self.x, self.y = 0, 0

Zmienne Klasy i obiekty Fakt 1. Zmienne można dodawać dynamicznie

Zmienne Klasy i obiekty Fakt 1. Zmienne można dodawać dynamicznie Nowa zmienna modułu modul.nowa zmienna = Nowa zmienna

Zmienne Klasy i obiekty 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

Zmienne Klasy i obiekty Fakt 2. Zmienne można usuwać dynamicznie

Zmienne Klasy i obiekty Fakt 2. Zmienne można usuwać dynamicznie Przykład x = x del x

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

Metody statyczne i metody klasy class Klasa: @staticmethod def dodawanie(a, b): return a + b @classmethod def utworz(cls): return cls() Te metody mogą być wywoływane przez klasy i obiekty.

Czysta metoda klasy class Klasa: def dodawanie(a, b): return a + b Obiekt tej metody nie może wywołać.

Przykład z https://realpython.com/blog/python class Pizza: def init (self, ingredients): self.ingredients = ingredients @classmethod def margherita(cls): return cls([ mozzarella, tomatoes ]) @classmethod def prosciutto(cls): return cls([ mozzarella, tomatoes, ham ])

Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 4

Klasy i obiekty Mechanizm przepływu sterowania

Klasy i obiekty Mechanizm przepływu sterowania to obiekty

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

Klauzula else Klasy i obiekty try: print 2/n except: print( Nieudane dzielenie ) else: print( Udane dzielenie )

Zgłaszanie wyjątków raise raise RuntimeError( Stało się coś złego )

Plan wykładu Klasy i obiekty 1 Klasy i obiekty 2 3 4

Wszystko jest obiektem.

Klasy i nadklasy obiektów Jak sprawdzić klasę obiektu >>> type(5) <type int > >>> x = 5 >>> x. class <type int >

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

Uniwersalny obiekt Obiekt uniwersalny: ma wszystkie pola i implementuje dowolną metodę.

Implementacja uniwersalnego obiektu Implementacja klasy class Uniwersalna(object):

Implementacja uniwersalnego obiektu Implementacja klasy class Uniwersalna(object): Implementacja dostępu do atrybutów def def getattr (self, name): print ( Odwołujesz się do atrybutu, name) return self setattr (self, name, val): print ( Przypisanie %s wartości %s % (name, val))

Implementacja uniwersalnego obiektu Implementacja klasy class Uniwersalna(object): Implementacja dostępu do atrybutów def def getattr (self, name): print ( Odwołujesz się do atrybutu, name) return self 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)

Zadanie Klasy i obiekty 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

Implementacja wektorów class Vector: def init (self, lista): self.value = lista

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

Wykorzystanie Klasy i obiekty v1 = Vector([1, 0, 3]) v2 = Vector([0, 2, 0]) print (v1 + v2)

Inne standardowe metody mul sub div mod mnożenie odejmowanie dzielenie reszta z dzielenia Tak zdefiniowane operatory zachowują standardowe priorytety.

Postać napisowa Klasy i obiekty >>> print (Vector([1,2,3])) < main.vector instance at 0xb7eabdec>

Postać napisowa Klasy i obiekty >>> print (Vector([1,2,3])) < main.vector instance at 0xb7eabdec> class Vector def str (self): return < +,.join([str(x) for x in self.value]) + >

Postać napisowa Klasy i obiekty >>> 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>

Własności kolekcji Pożądane cechy kolekcji Indeksowany dostęp do danych k[4] Obsługa poprzez iteratory for in rozmiar kolekcji len

Dostęp indeksowany Implementacja akcesorów w klasie Vector def def Zastosowanie getitem (self, index): return self.value[index] setitem (self, index, value): self.value[index] = value >>> print(v1[k]) >>> v1[k] = k

Pozostałe własności kolekcji Usuwanie elementu za pomoca del def delitem (self, index): del self.value[index]

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)

Stan obiektu/modułu Napis. class Figura. doc Figura. dict plik. file name

Słowniki symboli Klasy i obiekty Zmienne (oraz nazwy funkcji) w czasie działania programu są przechowywane w słowniku. dir() dict

Funkcja standardowa dir() Co robi dir Zwraca listę dostępnych nazw. Jeśli nie podano argumentu, to podaje listę symboli w lokalnym słowniku.

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

Przydatność słowników if nazwa in obj. dict : print (obj.nazwa) if str in dir(obj): print (str(obj))