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.

66 <strong>Python</strong> - objektni jezikclass D(A):def method1(self):print "Class D : method1"A.method1(self)# poziva roditeljsku metoduJedna posljedica ove £injenice nalazi se u inicijalizaciji klasnih instanci. Kad se instanca stvara, ondase ne poziva metoda __init__() roditeljskih klasa. To zna£i, da je u izvedenoj klasi nuºno na£initiispravnu inicijalizaciju roditeljske klase, ako je to potrebno. Na primjer:class D(A):def __init__(self, args1):# Inicijalizacija roditeljske klaseA.__init__(self)# Initialize myself...Sli£ni koraci mogu takožer biti nuºni kad se deniraju akcije £i²¢enja (brisanja objekata) u __del__()metodi. Kada se koristi referenca atributa C.ime na objekt klase, i 'ime' nije klju£ u C.__dict__,potraga se implicitno prosliježuje na svaki objekt klase koji je u C.__bases__, po redoslijedu navoženja.C-ove roditeljske klase mogu imati i vlastite roditeljske klase. U ovom slu£aju, potraga rekurzivnoproslježuje navi²e, po drvetu nasliježa, zaustavljaju¢i se kada je 'ime' naženo. Potraga je po dubini,²to zna£i da pregledava pretke svake roditeljske klase od C prije pregleda sljede¢e roditeljske klase odC. Slijedi primjer:class Roditeljska_1:def neka_metoda(self): print "Roditeljska_1"class Roditeljska_2(Roditeljska_1): passclass Base3:def neka_metoda(self): print "Roditeljska_3"class Izvedena(Roditeljska_2, Roditeljska_3): passinst1 = Izvedena( )inst1.neka_metoda( ) # ispisuje se: "Roditeljska_1"U ovom slu£aju potraga za metodom zapo£inje u klasi Izvedena. Ako tamo nije pronažena, potragase nastavlja na Roditeljska_2. Ako ni tamo atribut nije nažen, potraga ide na pretka Roditeljska_2,tj. na Roditeljska_1, gdje je atribut napokon nažen. Tako se pretraga zaustavlja na toj to£ki i nikadane uzima u obzir Roditeljska_3, gdje bi se taj atribut takožer na²ao.7.5.1 Premo²¢uju¢i atributiPotraga za atributom, kako je obja²njeno, ide navi²e po drvetu nasliježa (prema precima), te se zaustavljakada je atribut pronažen. Potoma£ke klase pregledavaju se prije predaka, ²to zna£i da kadapodklasa denira atribut s istim imenom kao i onaj na superklasi, pretraga nalazi deniciju na podklasii tu se zaustavlja. Ovo je poznato kao premo²¢ivanje (engl. overriding) denicije u superklasi kojeobavlja podklasa:class B:a = 23b = 45def f(self): print "metoda f u klasi B"def g(self): print "metoda g u klasi B"class C(B):b = 67

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

Saved successfully!

Ooh no, something went wrong!