12.07.2015 Views

Python

Python

Python

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

64 <strong>Python</strong> - objektni jezikObjektu instance moºe se dodati neki atribut povezivanjem neke vrijednosti na referencu atributa.Na primjer:class C7: passz = C7( )z.x = 23print z.x # ispisuje se: 23Objekt instance z sada ima atribut koji se zove x, povezan na vrijednost 23, i z.x se odnosi na tajatribut. To povezivanje atributa omogu¢uje takožer posebna metoda __setattr__. Stvaranje instanceimplicitno denira dva atributa instance. Za svaku instancu z, z.__class__ je klasa objekta kojemuz pripada, a z.__dict__ je rje£nik koji z koristi za £uvanje svih svojih ostalih atributa. Na primjer, zainstancu z koja je upravo stvorena:print z.__class__.__name__, z.__dict__# ispisuje se: C7, {'x':23}Oba ova atributa mogu se re-povezati (ali ne odvezati), iako je ovo rijetko nuºno. Za bilo koji objektinstance z, bilo koji objekt x, i bilo koji identikator S (osim __class__ i __dict__), z.S=x jeekvivalentan s z.__dict__['S']=x (osim ako __setattr__ posebna metoda presretne poku²aj povezivanja).Na primjer, za poznatu stvarenu instancu z:z.y = 45z.__dict__['z'] = 67print z.x, z.y, z.z # ispisuje: 23, 45, 67Nema razlike u atributima instance stvorenima s funkcijom __init__, zadavanjem preko atributaili po eksplicitnom povezivanju sa z.__dict__.7.4.3 Tvorni£ka funkcijaPostoji potreba stvaranja instance razli£itih klasa ovisno o nekim uvjetima ili izbjegavanje stvaranjanove instance ako je postoje¢a jo² uvijek dostupna. Te bi se potrebe mogle rije²iti tako da __init__vrati speci£an objekt, ali to nije mogu¢e jer <strong>Python</strong> podiºe iznimku kad __init__ vrati bilo kojuvrijednost osim None. Najbolji na£in implementacije eksibilnog stvaranja objekata je koriste¢i obi£nufunkciju, a ne pozivanjem objekta klase izravno. Funkcija koja se koristi u ovu svrhu zove se tvorni£kafunkcija.Pozivanje tvorni£ke funkcije je eksibilno rje²enje, jer takva funkcija moºe vra¢ati postoje¢u instancukoja se moºe ponovno koristiti ili stvoriti novu instancu pozivanjem odgovaraju¢e klase. Recimo dapostoje dvije sli£ne klase (Posebna i obicna) i da se treba generirati jedna od njih, ovisno o argumentu.Sljede¢a tvorni£ka funkcija Prikladna to omogu¢uje:class Posebna:def metoda(self): print "posebna"class Obicna:def metoda(self): print "obicna"def Prikladna(obicnaje=1):if obicnaje: return Obicna( )else: return Posebna( )i1 = Prikladna(obicnaje=0)i1.metoda( ) # ispisuje se: "posebna", kako je traºeno

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

Saved successfully!

Ooh no, something went wrong!