Večina objektno usmerjenih programerjev verjetno ne bi napisala in uporabila funkcije izpisi_tocko
. Kadar delamo z razredi in objekti, raje dodamo novo metodo razredu. Prav tako ne maramo preveč metod, ki bi uporabljale funkcijo print
. Boljši pristop je, da razred vsebuje metodo, ki omogoča vsakemu objektu, da ustvari niz oziroma besedilno predstavitev samega sebe. Ustvarimo takšno metodo in jo poimenujmo v_niz
:
class Tocka: # ... def v_niz(self): return "(" + str(self._x) + ", " + str(self._y) + ")"
V gornjem primeru in od tu dalje, bo komentar s tremi pikami (# ...
) označeval, da smo izpustili druge metode tega razreda.
Metodo lahko uporabimo takole:
>>> t = Tocka(7, 8) >>> print(t.v_niz()) (7, 8)
Toda, ali ne obstaja funkcija str
, ki samodejno pretvarja tip podatkov iz objekta v niz. Seveda obstaja! Tudi funkcija print
samodejno pretvarja objekte v nize, ko jih izpisuje? Tudi to drži! Vendar ti samodejni mehanizmi še ne delujejo, kot bi si želeli:
>>> str(t) '<__main__.Tocka object>' >>> print(t) '<__main__.Tocka object>'
To lahko zelo enostavno popravimo tako, da našo metodo v_niz
preimenujemo v __str__
. Tako se bo ta metoda izvedla vsakokrat, ko bomo želeli objekt Tocka
spremeniti v niz, na primer, kadar bomo uporabili funkciji str
in print
.
Spremenimo oziroma ustrezno dopolnimo naš program:
Gornji program izpiše koordinati točke:
(4, 3)