Objekt
Python
- Objekt kirjeldab ära konkreetse loogilise kogumi
- näiteks õues olev punane auto on üks objekt
- selle taga olev roheline auto on teine objekt jne
- Tavaliselt mõtleme me arvust kui ühest väärtusest
- Objekt koosneb tavaliselt mitmest väärtusest
- värv, mark, mudel, pikkus, registrimass jne.
Klass
- Klass kirjeldab ära struktuuri
- näiteks autol on värv, pikkus jne
- Klass (üldiselt) ei sisalda andmeid
- Klass on andmetüüp
- Samatüüpi andmed pärinevad kõik ühest klassist
- punane auto on auto, roheline auto on auto jne
- Kuigi meil on maailmas mitu autot (objekti), siis meil on üks klass auto
OOP
- Objekt-orienteeritud programmeerimine (OOP) on prgrammeerimise paradigma, mis kasutab objekte
- Python on objekti-orienteeritud programmeerimiskeel (OOP)
- Pythonis kõik asjad on objektid
OOP Tehnikad
- Kapseldamine (encapsulation)
- funktsionaalsus peidetakse
- Modulaarsus (modularity)
- programm jagatakse iseseisvateks tükkideks
- Polümorfism (Polymorfism)
- alamklass saab meetodeid üle kirjutada
- Pärimine (inheritance)
- alamklass pärib omadused ja meetodid
Sõne
- Sõne on objekt
- Kui loote uue sõne, siis tegelikult luuakse uus objekt, mille tüüp on str
- Sõne “funktsioone” kutsutakse meetoditeks
- ehk siis klassis kirjeldatud funktsioonid on meetodid
s = "Hello" print(type(s)) # <class 'str' > print(id(s)) # 30773472 print(id(s.replace("H", "h"))) # 61507648
- Loome sõne s ja küsime selle tüübi. Tüüp on str klass
- id tagastab objekti kohta unikaalse arvu. Kui id on erinev, siis on ka objekt erinev (st mälus erinevas kohas)
- replace teeb uue sõne, seda näeme ka id-ga
- replace on sõne meetod ehk funktsioon, mida saab välja kutsuda objektil
List
a = [1, 2, 3] b = [1, 2, 3] c = b print(id(a)) # 44058024 a.append(4) print(id(a)) # 44058024 - still as b print(id(b)) # 44059184 print(id(c)) # 44059184 - still as b b.pop() print(id(b)) #44059184 - still the same print(id(c)) # 44059184 - and same
- Listi muutes id ei muutu
- c ja b viitavad saamule listile
Veel objekte
print(type(1)) # <class 'int'> print(type(True)) # <class 'bool'> print(type(1.2)) # <class 'float'> print(type(None)) # <class 'NoneType'> print(type(len)) # <class 'builtin_function_or_method'> print(type(type)) # <class 'type'>
Klass kui andmetüüp
- Iga klass on andmetüüp
- Näiteks on Pythonis klass str
- Iga konkreetne sõne, näiteks “Tere”, on selle klassi objekti (ehk isend)
- Ühest klassist saab luua lõpmata palju objekte
- Objekti kohta öeldakse ka isend ja instants
- Üldiselt mõeldakse “objekt”, “isend”, “instants” terminitega samu asju
- Erinevates allikates võivad neil erinevused olla
Teeme oma klassi
class Student: pass s = Student() print(type(s)) # <class '__main__.Student'> print(id(s)) # 12448112 t = Student() print(type(t)) # <class '__main__.Student'> print(id(t)) # 12423408
- Klass Student. pass on tühi korraldus
- Loome kaks isendit – nende id on erinev (nad on mälus erinevas kohas)
Objektide võrdlemine
- Objektide võrdlemine
==
võrdlusega kontrollib vaikimisi seda, kas nad viitavad samale objektile - Seda, mida täpselt kontrollitakse, saab üle kirjutada
- Näiteks sõne puhul kontrollitakse seda, kas sisu (st sümbolid) on samad jne
s1 = Student() s2 = Student() s3 = s1 print(s1 == s2) # False print(s1 == s3) # True print(s2 == s3) # False
Meetod
- Klassis sisalduvaid funktsioone nimetatakse meetoditeks
class Student: """Student class.""" def hello(self): # method, "self" is a special parameter """Method (function) which just prints out "Hello!".""" print("Hello!") s = Student() # s is an object of class Student s.hello() # no "self" argument
Self
- Kõik objekti meetodid sisaldavad esimest parameetrit self
- selle parameetri nimi võib ka midagi muud olla; kasutage self
- self viitab isendile
- Eelmises näites oli väljakutse s.hello()
- kui hello() meetod käima pannakse, antakse sellele
s
kaasa
- kui hello() meetod käima pannakse, antakse sellele
- Meetodi jaoks vajalike väärtuste jaoks lisatakse need peale self parameetrit