Pretvarjanje objekta v niz

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:

Izvedi Počisti



Gornji program izpiše koordinati točke:

(4, 3)