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.
V tem poglavju bomo privzeli, da vso novo kodo dodajamo kodi iz prejšnjega poglavja, ki je shranjena v datoteki karte.py.
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
.