Razred Igralec

Pri skoraj vsaki igri s kartami moramo nekako predstaviti igralca in karte, ki jih drži v roki. Igralec (oziroma njegova roka) je na nek način seveda podoben kompletu kart. Oba vsebujeta karte, in oba potrebujeta operacije, kot na primer dodajanje in odstranjevanje kart. Prav tako potrebujemo tudi možnost mešanja kart, tako v igralčevi roki, kot v kompletu.

Igralec (oziroma karte v njegovi roki) se tudi razlikuje od kart v kompletu. Odvisno od igre, ki jo igramo, si verjetno želimo izvesti določene operacije, ki so vezane na karte v roki in nimajo smisla za karte v kompletu. Na primer, pri pokru verjetno želimo ovrednotiti karte v roki (en par, dva para, tris, lestvica itd.) ali jih primerjati s kartami v drugi roki. Pri bridge-u verjetno želimo izračunati rezultat kart v roki, da lahko položimo ustrezno stavo.


To stanje kaže oziroma namiguje na uporabo dedovanja. Če je razred Igralec podrazred razreda Komplet, bo vseboval vse metode razreda Komplet, dodali pa mu bomo lahko še nove metode ali pa spremenili že obstoječe metode. Če v podrazredu definiramo metodo, ki sicer že obstaja v osnovnem razredu, potem metoda v podrazredu nadomesti tisto v osnovnem razredu.

Pri definiciji novega razreda, se ime starševskega razreda zapiše med oklepaji. To nakazuje, da novi razred Igralec podeduje metode obstoječega razreda Komplet:

class Igralec(Komplet):
  pass

Inicializator razreda Igralec nastavi dve lastnosti objekta, to sta _ime in _karte. Lastnost _ime identificira igralca oziroma roko, s katero drži karte. Ime je neobvezna lastnost in je lahko tudi prazen niz. Lastnost _karte pa je tabela kart v roki in je na začetku prazna:

class Igralec(Komplet):

  def __init__(self, ime=""):
    self._karte = []
    self._ime = ime

Metodi za dodajanje in odvzemanje kart smo že definirali v starševskem razredu, zato sta podedovani tudi v razredu Igralec in ju lahko uporabimo nad primerki razreda oziroma objekti Igralec.