Za osnovne tipe obstaja šest primerjalnih operatorjev (==
, <=
, >=
, >
, <
in !=
), ki primerjajo vrednosti in določajo, kdaj je ena vrednost večja kot, manjša kot ali enaka drugi vrednosti. Če želimo lastne tipe primerjati s temi primerjalnimi operatorji, moramo v razredu definirati šest pripadajočih posebnih metod.
Začeli bomo z eno samo metodo, imenovano cmp
, ki bo vsebovala logiko primerjanja oziroma urejanja. Po dogovoru metoda za primerjanje dobi dva parametra, self
in karta
, in vrne 1, če je prvi objekt večji, -1, če je drugi objekt večji, in 0, če sta objekta enaka.
Nekateri tipi so popolnoma urejeni, kar pomeni, da lahko med seboj primerjamo katera koli dva elementa in ugotovimo, kateri je večji. Na primer cela števila in realna števila so popolnoma urejena. Nekateri tipi so neurejeni, kar pomeni, da ne obstaja nek smiselen način, s katerim bi lahko ugotovili kateri element je večji od drugega. Na primer sadje je neurejeno, zato ne moremo med seboj primerjati jabolk in hrušk. Podobno ne moremo smiselno po velikosti urediti zbirke fotografij.
Igralne karte do delno urejene, kar pomeni, da včasih lahko karte primerjamo med seboj, včasih pa ne. Na primer vemo, da je pikova 3 večja, kot pikova 2 in da je srčeva 3 večja, kot pikova 3. Toda katera karta je večja oziroma boljša: pikova 3 ali srčeva 2? Ena ima višjo vrednost, druga pa ima višjo barvo.
Če želimo karte primerjati med seboj, se moramo odločiti, kaj je bolj pomembno – vrednost ali barva. Povedano po pravici je izbira poljubna. Recimo, da je bolj pomembna barva, ker je nov komplet igralnih kart urejen tako, da so skupaj vse pikove karte, ki jim sledijo vse srčeve karte in tako dalje.
S to odločitvijo lahko sedaj napišemo metodo cmp
, nato pa še šest metod, ki bodo prekrile vsakega izmed šestih primerjalnih operatorjev: