Da bi lahko izpisali objekte Karta
v ljudem razumljivi obliki, moramo preslikati števila v ustrezne besede. To najnaravneje naredimo z uporabo tabel nizov. Ti tabeli nizov priredimo lastnostim razreda (ang. class attributes) na vrhu definicije razreda (glej primer v interaktivnem urejevalniku – _barve
in _opisi
). Lastnost razreda je definirana izven metod razreda, uporabimo pa jo lahko v vsaki metodi razreda.
V metodi __str__
lahko uporabimo lastnosti objekta (ang. instance attribute) _barva
in _vrednost
, da preslikamo števili v niza. Na primer izraz self._barve[self._barva]
pomeni, da uporabimo lastnost _barva
objekta self
kot indeks v tabeli, imenovani _barve
, ki je lastnost razreda ter tako izberemo ustrezen niz iz te tabele.
Razlog, da smo v tabeli _vrednosti
kot prvi element uporabili None
je v tem, da ta element služi kot ničelni element seznama, ki ne bo nikoli uporabljen. Veljavne vrednosti so samo tiste med 1 in 13. Ta prvi element bi lahko tudi izpustili. Lahko bi začeli pri indeksu 0, kot običajno, vendar je manj moteče, če kodiramo vrednost 2 kot število oziroma indeks 2, 3 kot 3 in tako dalje.
Z metodama __init__
in __str__
lahko ustvarimo in izpišemo karte:
>>> karta1 = Karta(1, 11) >>> print(karta1) Srčev fant >>> karta2 = Karta(1, 3) >>> print(karta2) Srčeva 3
Ker se vsak objekt Karta
sklicuje na isto lastnost razreda, imamo lahko težavo. Težava je v tem, da, če spremenimo lastnost razreda (pri enem objektu), to vpliva na vse objekte. Če bi se na primer odločili, naj se »Karin fant« dejansko imenuje »Kitov fant«, bi lahko naredili tole:
>>> karta1._barve[1] = "Kitov" >>> print(karta1) Kitov fant
Težava je v tem, da bi sedaj vse »karine« karte v bistvu postale »kitove« karte, na primer:
>>> print(karta2) Kitova 3
Zato ne spreminjamo lastnosti razreda. Prav tako tega ne počnemo neposredno, ampak kvečjemu z uporabo ustreznih metod za vračanje in nastavljanje vrednosti lastnosti.