Podklase

Šta ako imamo neke objekte koji sadrže elemente kao i već postojeća klasa (npr. NebeskaTela kod nas), ali imaju dodatne objekte, ili dodatne potrebne metode? U ovakvom slučaju koristimo podklase.

Želimo da napravimo klasu Planete, koja će biti podklasa klase NebeskaTela, koja će već imati određen tip, ali ima i oko koje zvezde se okreće, i dodatno, ima metodu koja nam govori drugačiji citat.

  
class Planete(NebeskaTela):
    tip="planeta"
    def __init__(self,precnik,otkrivac,zvezda):
        self.precnik=precnik
        self.otkrivac=otkrivac
        self.zvezda=zvezda
    def citat(self):
        return "Jednom kad donesete odluku, citav svemir se udruzi da bi se ostvarila."
            

Do sada nismo obraćali pažnju na to što se u zagradi kod definisanja klasa navodi object. To u stvari znači da klasa koju pravimo nasleđuje klasu čije ime smo naveli u zagradi. Kada navedemo klasu object, to znači da pravimo objekat, i klasa nasleđuje sve što se nalazi u objektu. Ako navedemo ime neke klase koju smo sami napravili, kao u ovom slučaju NebeskaTela, klasa Planete će naslediti sve što se nalazi u klasi NebeskaTela.

Hajde da napravimo dva objekta, jedan iz klase NebeskaTela i jedan iz klase Planete.

  
sunce=NebeskaTela("zvezda",1369000,"svi")
zemlja=Planete(6370,"svi mi","Sunce")
            

Kao što se može primetiti, inicijalizacija, odnosno kreiranje objekta, se razlikuje. Razlikuje se zbog toga što smo u klasi Planete ponovo definisali (redefinisali) funkciju inicijalizacije.
Redefinisanje funkcioniše na sledeći način: sve metode koje su definisane u nadklasi se nalaze i mogu se koristiti u okviru podklase, sem ako se redefinišu, u tom slučaju, pri pozivanju metode koristi se redefinisana metoda.

Pokažimo to na primeru (pretpostavimo da smo napravili klase NebeskaTela i Planete, kao i instance sunce i zemlja):

  
print(sunce.sve())
print(zemlja.sve())
print(sunce.citat())
print(zemlja.citat())
            
Kopiraj

Kao rezultat ćemo dobiti:

			Ovo je zvezda, precnika 1369000 i otkrio/otkrili su je svi!
			Ovo je planeta, precnika 6370 i otkrio/otkrili su je svi mi!
			Postoji teorija koja kaze da ce, ukoliko ikada iko bude
					otkrio koja je svrha svemira i zasto on postoji,
					ovaj smesta isceznuti i biti zamenjen necim jos neobicnijim
					i neobjasnjivijim. Postoji i druga teorija koja tvrdi da se sve to vec desilo.
			Jednom kad donesete odluku, citav svemir se udruzi da bi se ostvarila.
        

Kao što se može primetiti, metoda sve, koja nije redefinisana, ispisuje isti oblik, samo sa različitim vrednostima, dok metoda citat, koja je redefinisana, vraća različite citate.

Vežba: Napraviti klasu Zivotinje, sa vrstom i imenom životinje, i njenu podklasu Pas, koja će imati ime životinje, ime vlasnika, i vrstu podrazumevanu za sve, koja ima vrednost “pas”. Zatim napraviti tri instance, dve iz klase Zivotinje sa vrstom “pas” i “macka” i jednu iz klase Pas. Napraviti metodu oglasavanje kao u prethodnoj vežbi. Isprobati oglasavanje na sve tri instance.

levo desno

Uputstvo

Neke od programa nećete moći da pokrenete na našoj konzoli, zato Vam predlažemo da sa zvaničnog sajta www.python.org preuzmete portabilnu verziju. Instalacija je vrlo jednostavna. Mi Vam predažemo da odaberete verziju 3.3.5 koju smo i mi koristili. Tekstualni editor u kome možete pisati svoje programe se pokreće preko programa koji se zove IDLE i automatski se instalira sa celim paketom. Novi program započinjete klikom na padajući meni "FILE" >> "NEW FILE". Možete ga pokrenuti pritiskom na dugme F5 na tastaturi.
Konzola koja se nalazi na sajtu omogućava rad sa većinom prezentovanog materijala, ali je naglašeno kada je potrebno preći na instaliranu konzolu.

;