Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i...

27
Objektno programiranje 1 h Klase i Mario Essert, Tihomir ˇ Zili´ c, Vladimir Mili´ c Fakultet strojarstva i brodogradnje, Zagreb 2017 by: Tihomir ˇ Zili´ c 1 Python 3 http://www.fsb.hr/OP Mario Essert, Tihomir ˇ Zili´ c, Vladimir Mili´ c (Fakultet strojarstva i brodogradnje, Zagreb) Objektno programiranje: Klase 2017 by: Tihomir ˇ Zili´ c 1 / 27

Transcript of Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i...

Page 1: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Objektno programiranje 1

〈 Klase 〉

Mario Essert, Tihomir Zilic, Vladimir Milic

Fakultet strojarstva i brodogradnje, Zagreb

2017

by: Tihomir Zilic

1Python 3 http://www.fsb.hr/OPMario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 1 / 27

Page 2: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Klase (razredi)Prozimanje podataka i funkcija unutar jednog razreda (klase).

Primjer klase: Skolski razred,

podaci - ime, prezime, godine, spol, skola daka

funkcije - usmeni, pismeni ispit, zadace, ocjene predmeta, druzenje,aktivnosti,..

Primjer klase: Abeceda,

podaci - broj slova, tip abecede

funkcije - stvaranje rijeci, prebrojavanje slova u toj rijeci

Primjer klase: Ziva bica,

podaci - visina, sirina, duzina

funkcije - rast, razmnozavanje, hranjenje,...

Primjer klase: Proizvodnja energije,

podaci - tip elektrane, mjerena satna proizvodnja

funkcije - ukupna proizvodnje, akumulacija,...

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 2 / 27

Page 3: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Objektno-orijentirano programiranjeIdeja: podaci i funkcije zajedno u klasi (razredu).

METAKLASA (defaultna ima naziv type)

metaklasa je stvaratelj klasa (tzv. tipova podataka)

x KLASA je objekt nastao iz metaklasex ime klase je ime tipa podatka, npr. int, float, string, function,list, tuple,...

* OBJEKTI nekog tipa nastaju iz klase tog tipa,* npr. iz klase float nastaju objekti 4.1,88.8,...* s npr. pripadajucim metodama >>> 88.8. add (34) isto sto i >>>

88.8+34, ...

type(objekt) vraca ime klase objekta:

>>> type (88.8) , type ([1 ,2,3]) #objekti klase

(<class ’float ’>, <class ’list’>) #klase

>>> type(float),type(list) #objekti metaklase

(<class ’type’>, <class ’type’>) #metaklasa

>>> type(float)

<class ’type’> #metaklasa

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 3 / 27

Page 4: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

type

Metaklasa type, ovisno kako se pozove je:

1 stvara se novi objekt tj. klasu (tzv. novi tip podatka)

2 vraca ime klase (tzv. tip podatka) objekta

>>> help(type)

Help on class type in module builtins:

class type(object)

| type(object_or_name , bases , dict)

| type(object) -> the object ’s type

| type(name , bases , dict) -> a new type

...

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 4 / 27

Page 5: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Metaklase

Pozivom metaklase type stvara se novi objekt tj. klasa (tzv. novi tippodatka).

Ime_klase = type("Ime_klase", bases , dict)

Primjer stvaranje klase MojaKlasa iz metaklase type:

>>> MojaKlasa=type("MojaKlasa" ,(),{"a":1})

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 5 / 27

Page 6: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Stvaranje klase kljucnom rijeci class

class Ime_klase:

tijelo klase

ili

class Ime_klase(klase_roditelji ):

tijelo klase

Primjer stvaranje klase MojaKlasa:

>>> class MojaKlasa:

a=1

Ime klase pocinje velikim slovom, npr. MojaKlasa

Ime klase je BEZ uglatih zagrada, npr. MojaKlasa:, osim kodnasljedivanja npr. MojaKlasa(roditelji):

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 6 / 27

Page 7: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Atributi klase

Atributi klase su podaci, funkcije i metode unutar klase,

metoda je funkcija u klasi koja ima prvi parametar self, (ili jedekorator)

za pristup atributu koristi sintaksu s tockom, klasa.atribut

class MojaKlasa:

’’’Ovo je moja klasa ’’’

a=9 # atribut klase , podatak

def kvad(x): # atribut klase , funkcija

return x**2

def f(self ,y): # atribut klase , metoda

return MojaKlasa.a + y + MojaKlasa.kvad (3)

>>> MojaKlasa.__doc__ #ugradjeni atribut __doc__

’Ovo je moja klasa ’

>>> print(MojaKlasa.a, MojaKlasa.kvad(5), MojaKlasa.f("a" ,5))

9 25 23

Poziv atribute klase MojaKlasa.f("a",5) moze se da na mjesto self

parametra staviti bilo koje ime, poput ovdje "a".

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 7 / 27

Page 8: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Ugradeni atributi klaseKlasama se pri stvaranju automatski pridjeljuju posebni atributi poput:

dict , rjecnik svih atributa klase

bases , n-terac objekata roditeljskih klase u naredbi class

name , ime klase

class , ime klase objekta, tj. isto kao type(ime)

doc , dokumentacija (opis) klase

...

Primjer:

>>> MojaKlasa.__name__

’MojaKlasa ’

>>> MojaKlasa.__dict__["a"]

9

>>> MojaKlasa.__bases__

(<class ’object ’>,)

>>> MojaKlasa.__class__

<class ’type’>

>>> MojaKlasa.__doc__

’Ovo je moja klasa ’

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 8 / 27

Page 9: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Promjena, dodavanje i brisanje atributa klase

Promjena i dodavanje te brisanje atributa klase izvodi se:

Promjena atributa:

>>> MojaKlasa.a = 10 # promjena atributa a na 10 (a bio je 9)

>>> MojaKlasa.a

10

Dodavanje atributa:

>>> MojaKlasa.c = "ja sam novi" # dodavanje atributa c

>>> MojaKlasa.c

’ja sam novi’

Brisanje atributa narednom del:

>>> del MojaKlasa.a # brisanje atributa a

>>> MojaKlasa.a

AttributeError: type object ’MojaKlasa ’ has no attribute ’a’

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 9 / 27

Page 10: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Objekti, engl. instances

Nastaju iz klase i imaju sva obiljezja te klase.

ime_objekta = Ime_klase ()

Pri stvaranju objekta iz klase potrebno je uz ime klase dodati i oblezagrade, kao Ime klase().

Stvoreni objekt se znakom pridruzbe (=) povezuje s identifikatoromime objekta i cije ime nosi.

pri stvaranju objekta parametar self unutar klase povezuje se sime objekta.

Primjer stvaranje objekta mojobjekt iz klase MojaKlasa:

mojobjekt = MojaKlasa ()

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 10 / 27

Page 11: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Atributi objekata

Atributi objekta su podaci i metode. Funkcije unutar objekta mogu sepozvati samo ako su metode.

class MojaKlasa:

’’’Ovo je moja klasa ’’’

a=9 # atribut klase , podatak

def kvad(x): # atribut klase , funkcija

return x**2

def f(self ,y): # atribut klase , metoda

return MojaKlasa.a + y + MojaKlasa.kvad (3)

>>> mk=MojaKlasa () # stvaranje objekta mk iz klase MojaKlasa

>>> mk.a # atribut objekta , podatak

9

>>> mk.f(6) # atribut objekta , metoda

24

>>> mk.kvad (2) # atribut objekta , funkcija

TypeError: kvad() takes 1 positional argument but 2 were given

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 11 / 27

Page 12: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Metode klase i njenih objekata

Metode klase su funkcije definirane:

self parametrom koji je vezan uz ime objekta izvedenog iz te klase:

def ime_funk(self ,...):

Koristi se za poziv metode koristenjem: objekt.ime funkc(arg).

kao @classmethod dekoratora (iznad funkcije) tj. preko parametrakoji je vezan uz ime te klase, npr. cls parametar:

@classmethod

def ime_funk(cls ,...):

Koristi se za poziv metode koristenjem: klasa.ime funkc(arg)

kao @staticmethod dekoratora (iznad funkcije):

@staticmethod

def ime_funk (...):

Koristi se za poziv metode nevezane uz ime objekta ili klase.

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 12 / 27

Page 13: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Primjeri definicije metoda

class MojaKlasa:

a=9

def f(self ,y):

return MojaKlasa.mult (5) + y + MojaKlasa.kvad (3)

@staticmethod

def kvad(x):

return x**2

@classmethod

def mult(cls ,g):

return cls.kvad(g) + g + cls.a

>>> mk1=MojaKlasa ()

>>> print("Iz objekta: ", mk1.f(3))

Iz objekta: 51

>>> print("Iz klase:", MojaKlasa.mult(3), \

", a moze i objekta:", mk1.mult (3))

Iz klase: 21 , a moze i objekta: 21

>>> print("Iz klase:", MojaKlasa.kvad(3), \

", ili iz objekta:", mk1.kvad (3))

Iz klase: 9 , ili iz objekta: 9

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 13 / 27

Page 14: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Promjena vrijednosti atributa objekta

Atributi pojedinacnog objekta mogu se mijenjati.

class Prom:

a=9 # atribut klase , integer podatak

def f(self ,y): # atribut klase , metoda

return y + Prom.a

>>> mk=Prom() # stvaranje objekta mk iz klase MojaKlasa

>>> print(mk.a, mk.f(3)) #ispis atributa objekta mk

9 12

>>> mk.a="atribut podatak" #promjena atributa a

>>> def k(x): return 2*x # nova funkcija k() izvan objekta

>>> mk.f=k # promjena reference na metode objekta mk

>>> print(mk.a, mk.f(3))

atribut podatak 6

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 14 / 27

Page 15: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Vise objekata i problemi atributa

Atribute klase sadrze svi objekti nastali iz iste klase. Atributi spromjenjivim tipom podatka, popt liste, rjecnika... koristiti s oprezom ...

class Prom:

a=9 # atribut klase , integer podatak

b=[1,2,3] # atribut klase , lista podatak

>>> mk1=Prom() # stvaranje objekta mk1 iz klase MojaKlasa

>>> mk2=Prom() # stvaranje objekta mk2 iz klase MojaKlasa

>>> print(mk1.a, mk1.b)

9 [1, 2, 3]

>>> print(mk2.a, mk2.b)

9 [1, 2, 3]

>>> mk1.a=10 # promjena integera u mk1

>>> print(mk1.a, mk1.b)

10 [1, 2, 3]

>>> mk1.b[1]="s" # promjena u LISTI u mk1 utjece na mk1 i mk2

>>> print(mk1.a, mk1.b)

10 [1, ’s’, 3]

>>> print(mk2.a, mk2.b)

9 [1, ’s’, 3]

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 15 / 27

Page 16: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Funkcionalnost klase koristenjem self

self:

je ime prvog parametra metode (ako nije dekorator),implicitni parametar, znaci pri pozivu metode iz objekta se on ne vidikao argument,pri stvaranju objekta iz klase povezuje se s imenom objekta, i takospecificira taj objekt,sve metode unutar klase koje ga sadrze imaju pristup njenimelementima i to je nacin kako se prenose identifikatori medumetodama.

class Prijenos:

def A1(self):

self.K="Dobar "

return "prijatelju"

def A2(self , x):

print(self.K + x + self.A1())

>>> p1=Prijenos ()

>>> p1.A1() # spremanje varijable K u self (p1) objekt

’prijatelju ’

>>> p1.A2("dan") # potrebno je prije pozvati p1.A1()

Dobar dan prijateljuMario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 16 / 27

Page 17: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Inicijalizacija objekta

Stvoreni objekt self sadrzi samo definicije metoda, potrebna jeinicijalizacija. Posebna metoda init inicijalizira objekt automatskiodmah nakon njegovog stvaranja.Napomena: init je metoda koja treba vracati None, pa se naredbareturn None moze izostaviti.

class Prijenos:

def __init__(self):

self.K="Dobar "

self.A1=" prijatelju"

def A2(self , x):

print(self.K + x + self.A1)

>>> p1=Prijenos ()

>>> p1.A2("dan")

Dobar dan prijatelju

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 17 / 27

Page 18: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Razlicita inicijalizacija objektaObjekti se pri stvaranju mogu inicijalizirati razlicitim pocetnimargumentima. Za to je potrebno u metodu init postaviti dodatneparametre nakon parametra self.Objekt se stvara i inicijalizira pozivom klase s argumentima.

class Prijenos:

def __init__(self ,y):

self.K=y

def A2(self , x):

print(self.K + x)

>>> p1=Prijenos("Dobar ") # poziv klase s "Dobar "

>>> p1.A2("dan")

Dobar dan

>>> p2=Prijenos("Super ") # poziv klase sa "Super "

>>> p2.A2("dan")

Super dan

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 18 / 27

Page 19: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Promjenjivi tipovi podataka kao atributi ili u metodi

Isto se pozivaju Atributi ostaju isti u svim objektima iz te klase ako se ubilo kojem promijeni mjenja se svugdje. Podaci ako su unutar metodeonda pripadaju samo tom objektu.

class Prijenos:

z=["a"]

def __init__(self):

self.g=[1]

>>> p1=Prijenos () % objekt p1

>>> p2=Prijenos () % objekt p2

>>> p1.z[0]="b" % promjena atributa z (lista)

>>> p1.g[0]=2 % promjena podatka g (lista) u metodi

>>> print("Objekt p1:", p1.z, p1.g) % poziv z i g iz p1

Objekt p1: [’b’] [2]

>>> print("Objekt p2:", p2.z, p2.g) % poziv z i g iz p2

Objekt p2: [’b’] [1]

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 19 / 27

Page 20: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Privatni atributi klase

Identifikator (npr. ident) u klasi:

koji pocinje s jednom podcrtom, kao npr. ident, govori o tome da jeto privatni atribut klase i da ga korisnik ne mijenja (iako moze na istinacin kao i klasicne metode bez podcrta).

koji pocinje s dvije podcrte, kao npr. ident, Python compilerimplicitno mijenja u classname ident, gdje je classname imeklase. Ovo omogucuje da takvi privatni atributi ostanu nepromijenjenipri nasljedivanju klasa.

gornje dva navedena mogu takoder zavrsavati bez podcrte ili najvise sjednom, npr. ident ili ident .

ako pocinje i zavrsava sa dvije podcrte, to je Python-ova ugradenametoda! Moze ju se pod tim imenom predefinirati pri konstruiranjuklase.

svi privatni atributi objekta (klase) su vidljivi i moze im se pristupiti”izvana”!

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 20 / 27

Page 21: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Primjer privatni atributi klase

class Moje:

def __privatna(self):

x=":-)"

return x

def javna(self):

print("Privatna poruka glasi: ", self.__privatna ())

>>> m=Moje()

>>> m.__privatna ()

AttributeError: ’Moje’ object has no attribute ’__privatna ’

>>> m._Moje_privatna ()

’:-)’

>>> m.javna()

Privatna poruka glasi: :-)

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 21 / 27

Page 22: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Posebne metode klasePosebne metode nad objektima, koriste sintaksu: q. metoda (p), pricemu su q,p objekti.

Operator Metoda Operator Metoda

+ add += iadd

∗ mul *= imul

− sub -= isub

/ truediv /= itruediv

// floordiv //= ifloordiv

∗∗ pow

== eq != ne

<= le < lt

>= ge > gt

() call [ ] getitem

Primjer:

>>> 10.5. __mul__ (7) # isto kao 10.5*7

73.5

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 22 / 27

Page 23: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Metoda call , poziv objekta kao funkcije

Primjer funkcije:

>>> def punk ():

print("punk funkcija")

>>> punk() # poziv funkcije punk

punk funkcija

Primjer klase:

>>> class KK:

def punk(self):

print("punk metoda")

>>> pk=KK()

>>> pk.punk() # poziv metode punk ()

punk metoda

>>> class KK:

def __call__(self):

print("call metoda")

>>> punk=KK() # objekt s imenom punk

>>> punk() # poziv __call__ metode

call metoda

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 23 / 27

Page 24: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Nasljedivanje klasa

class Potomak(Roditelj1 , Roditelj2 , ...):

tijelo klase

roditeljska klasa (bazna klasa ili superklasa)

potomak klasa (podklasa), nasljeduje strukture roditeljski klasa

potomak klasa moze se dopuniti svojim elementima

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 24 / 27

Page 25: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Primjer nasljedivanja klasaKlase:

>>> class C1: a=1 # roditeljska klasa

>>> class C2: b=2 # roditeljska klasa

>>> class C(C1 ,C2): # potomak klasa

g=3

print(C1.a+C2.b+g)

6

Objekti:

>>> c1=C1() # objekt iz C1

>>> c2=C2() # objekt iz C2

>>> c=C() # objekt iz C

>>> c1.a # objekt c1 ima a

1

>>> c2.b # objekt c2 ima b

2

>>> print(c.a,c.b,c.g) # objekt c ima a,b,g

1 2 3

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 25 / 27

Page 26: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Primjer nasljedivanja klasaKlase:

>>> class C1: _a=1 # roditeljska klasa

>>> class C2: b=2 # roditeljska klasa

>>> class C(C1 ,C2): # potomak klasa

_a=12

g=3

print(C1._a+C2.b+g+_a)

6

Objekti:

>>> c1=C1() # objekt iz C1

>>> c2=C2() # objekt iz C2

>>> c=C() # objekt iz C

>>> c1.a # objekt c1 ima a

1

>>> c2.b # objekt c2 ima b

2

>>> print(c.a,c.b,c.g) # objekt c ima a,b,g

1 2 3

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 26 / 27

Page 27: Objektno programiranje '426830A Klase '526930B · PDF fileObjektno programiranje 1 hKlase i Mario Essert, Tihomir Zili c, Vladimir Mili c Fakultet strojarstva i brodogradnje, Zagreb

Provjera porijekla objekata i klasa

Objekti: isinstance(objekt, (klase))

>>> isinstance(c1 ,C1)

True

>>> isinstance(c1 ,(C,C2))

False

Klase: issubclass(klasa, (roditeljske klase..))

>>> issubclass(C,C1)

True

>>> issubclass(C1 ,(C,C2))

False

Mario Essert, Tihomir Zilic, Vladimir Milic (Fakultet strojarstva i brodogradnje, Zagreb)Objektno programiranje: Klase 2017 by: Tihomir Zilic 27 / 27