Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
68 <strong>Python</strong> - objektni jezikA.__init__(self)self.__X = 37# Pretvara se u self._B__XIako ovakva shema daje iluziju sakrivanja podataka, ne postoji stvarni mehanizam da bi se sprije£iopristup "privatnim" atributima neke klase. To zna£i da, ako su poznati klasa i njen atribut, onda seoni mogu dohvatiti s gore opisanim punim imenom iz bilo koje instance.7.5.5 Operatorsko punjenjeKorisni£ki objekti mogu se pro²iriti s novim operatorima, dodaju¢i posebne metode da zajedno rade sasvim <strong>Python</strong>-ovim ugraženim operatorima. Na primjer, sljede¢a klasa nadopunja kompleksne brojeve sastandardnim matemati£kim operatorima i prisilnim tipovima kako bi se ostvarilo mije²anje kompleksnihbrojeva s cijelim i realnim brojevima.class Complex:def __init__(self,real,imag=0):self.real = float(real)self.imag = float(imag)def __repr__(self):return "Complex(%s,%s)" % (self.real, self.imag)def __str__(self):return "(%g+%gj)" % (self.real, self.imag)# self + otherdef __add__(self,drugi):return Complex(self.real + drugi.real, self.imag + drugi.imag)# self - otherdef __sub__(self,drugi):return Complex(self.real - drugi.real, self.imag - drugi.imag)# -selfdef __neg__(self):return Complex(-self.real, -self.imag)# drugi + selfdef __radd__(self,drugi):return Complex.__add__(drugi,self)# other - selfdef __rsub__(self,drugi):return Complex.__sub__(drugi,self)# Prisilno pretvori ostale numeri£ke tipove u kompleksnidef __coerce__(self, drugi):if isinstance(drugi, Complex):return self,drugitry: # Provjeriti ako se moºe pretvoriti u floatreturn self, Complex(float(drugi))except ValueError:passU ovom primjeru, postoji nekoliko zanimljivih detalja:1. Prvo, normalno pona²anje od __repr__() je stvaranje stringa koji ¢e se izvr²iti kako bi se ponovnona£inio objekt. U ovom slu£aju stvara se string oblika "Complex(r,i)". U drugom slu£aju, metoda__str__() stvara string koji je namijenjen za lijepi formatirani izlaz (to je string koji ¢e se ispisatis pomo¢u print naredbe).2. Drugo, da bi se radilo s operatorima u kojima se kompleksni brojevi pojavljuju i na lijevoj i nadesnoj strani operatora, moraju se koristiti __op__() i __rop__() metode.