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.4. Instanca klase 63Interno, svaka instanca se stvara koriste¢i rje£nik koji je dohvatljiv kao instanca __dict__ atributa.Ovaj rje£nik sadrºi informaciju koja je jedinstvena za svaku instancu. Na primjer:>>> print a.__dict__{'novac': 1000.0, 'osoba': 'Mario'}>>> print b.__dict__{'novac': 100000000000L, 'osoba': 'Bill'}Kad god se atributi instance promijene, ove promjene nastaju u njihovom lokalnom rje£niku instance.Unutar metoda deniranih u klasi, atributi se mijenjaju kroz pridruºbu self varijabli. Mežutim, noviatributi mogu se dodati nekoj instanci u bilo kojem trenutku, kao na primjer:a.jmbg = 123456# dodaje atribut 'jmbg' u a.__dict__Iako se pridruºba atributima uvjek provodi na lokalnom rje£niku neke instance, pristup atributuponekad je vrlo sloºen. Kad god se pristupa atributu, <strong>Python</strong> interpreter (compiler) prvo pretraºujerje£nik instance. Ako ne naže traºeno, onda se pretraºuje rje£nik objekta klase koja se koristila zastvaranje instance. Ako ni to nije urodilo plodom, onda se provodi pretraºivanje roditeljskih klasa (akoih klasa ima). Ako i to propadne, kona£ni poku²aj traºenja atributa je pozivom __getattr__() metodete klase (ako je denirana). Na koncu, ako ni to ne uspije, onda se podiºe AttributeError iznimka.Kako je pokazano, da bi se stvorila instanca klase, treba se (poput poziva funkcije) pozvati objektklase. Svaki poziv vra¢a novi objekt instance te klase: jedna_instanca = C5(). Ugražena funkcijaisinstance(Obj,C) s objektom klase kao argumentom C vra¢a True ako je objekt Obj instanca klaseC ili bilo koje podklase od C. U protivnom isinstance vra¢a False.7.4.1 __init__Kada klasa ima ili naslježuje metodu __init__, poziv objektu klase implicitno izvr²ava __init__ nanovoj instanci kako bi se obavila inicijalizacija koja je potrebna instanci. Argumenti koji se predajuputem poziva moraju odgovarati formalnim parametrima __init__ metode. Na primjer, u sljede¢ojklasi:class C6:def __init__(self,n):self.x = nEvo kako stvoriti jednu instancu klase C6:jedna_instanca = C6(42)Kako je pokazano u C6 klasi, metoda __init__ obi£no sadrºi naredbe koje povezuju atribute instance.Metoda __init__ ne smije vra¢ati nikakvu vrijednost osim vrijednosti None, jer svaka drugavra¢ena vrijednost uzrokuje TypeError iznimku. Glavna svrha __init__ je povezivanje, tj. stvaranjeatributa novostvorene instance. Atributi instance takožer se mogu povezivati ili re-povezivati i izvan__init__ metode. Programski kod bit ¢e £itljiviji ako se svi atributi klasne instance inicijalno poveºunaredbama u metodi __init__.7.4.2 Atributi objekta instanceJednom kada se stvori instanca, moºe se pristupiti njenim atributima (podacima i metodama) koriste¢i'to£ka' (.) operator. Na primjer:i4=C4();i4.pozdrav( ) # ispisuje se: Zdravoprint jedna_instanca.x # ispisuje se: 42

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

Saved successfully!

Ooh no, something went wrong!