12.07.2015 Views

Python

Python

Python

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

7.5. Naslježivanje 67c = 89d = 123def g(self): print "metoda g u klasi C"def h(self): print "metoda h u klasi C"U ovom kodu, klasa C premo²¢uje atribute b i g od njene superklase B.7.5.2 Posluºivanje metoda superklaseKada podklasa C premosti metodu f svoje superklase B, tijelo C.f £esto ºeli predati neki dio svojeoperacije implementaciji metode superklase. Ovo se moºe napraviti koriste¢i nepovezanu metodu, kakoslijedi:class Gornja:def pozdrav(self, ime): print "Zdravo ", imeclass Donja(Gornja):def pozdrav(self, ime):print "Dobro do²li",Gornja.pozdrav(self, ime)x = Donja( )x.pozdrav('Miki')Predaja superklasi, u tijelu Donja.pozdrav, koristi nepovezanu metodu dobivenu referencom atributaGornja.pozdrav na superklasi, i zato prenosi sve atribute normalno, uklju£uju¢i self. Predajaili posluºivanje implementaciji superklase je glavna korist nepovezanih metoda.7.5.3 Vi²eobli£jeVi²eobli£je ili polimorzam, (eng. polymorphism) ili dinami£ko povezivanje potpuno se otkriva krozproces traºenja nekog atributa, prethodno opisano u naslježivanju objekata. Kad god se metodi pristupasa obj.method(), prvo se metoda locira traºenjem __dict__ atributa instance, pa instancine klasnedenicije, pa roditeljskih klasa. To traºenje uvijek ide u tom redoslijedu. Prvi uspje²ni pronalazakkoristi se kao traºena metoda.7.5.4 Skrivanje informacije (engl. information hiding)Pretpostavlja se da su svi atributi javni (engl. public). To zna£i da su svi atributi klasne instancedohvatljivi bez ikakvog ograni£enja. To takožer povla£i da sve ²to je denirano u temeljnoj, roditeljskojklasi naslježuje se i dohvatljivo je u izvedenoj klasi. Takvo pona²anje je £esto nepoºeljno u objektuorjentiranim primjenama, jer to otkriva nutarnju strukturu objekta i moºe voditi koniktima prostoraimena izmežu objekata deniranih u izvedenoj klasi i onih deniranih u roditeljskoj klasi. Da bi serije²io ovaj probleem, uvedeno je da sva imena u klasi koja po£inju s dvostrukom donjom crtom (__) ,kao ²to je __Moj, pretvara se u oblik _Classname __Moj. To pruºa rje²enje za klasu da ona ima privatneatribute, budu¢i da privatna imena u izvedenoj klasi ne¢e kolidirati s imenima u temeljnoj klasi jer suimena klasa nuºno razli£ita, a dolaze ispred imena atributa. Na primjer:class A:def __init__(self):self.__X = 3# Pretvara se u self._A__Xclass B(A):def __init__(self):

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!