Lastnosti razreda

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

Izvedi Počisti