11.1 Klases un objekti

Tavs šīs stundas izaicinājums: Saprast, kas ir klase, objekts un kā tās atšķiras no vienkāršām vārdnīcām.

SR 2.4.18. Lieto OOP pamatus SR 2.4.15. Modulāras programmas un funkcijas

Teorija: Klase = veidne, objekts = eksemplārs

Klase ir veidne (kā cepuma forma), no kuras var izveidot daudzus objektus (cepumus). Katrs objekts ir patstāvīgs un var saturēt dažādas vērtības, bet visiem ir vienāda struktūra un metodes.

class Suns:
    """Suņa klase."""
    pass  # tukša klase — tikai pamatstruktūra

# Objektu izveide
rex = Suns()
mufa = Suns()

print(type(rex))  # <class '__main__.Suns'>
print(rex is mufa)  # False — divi atšķirīgi objekti

Kāpēc izvēlēties klasi pār vārdnīcu? Klases nodrošina:

1. uzdevums: Pirmā klase

Definē tukšu klasi un izveido tās objektus.

Izpildes soļi:

  1. Izveido failu klases.py.
  2. Definē klasi Speletajs ar pass ķermenī.
  3. Izveido divus objektus: p1 = Speletajs() un p2 = Speletajs().
  4. Pievieno atribūtus: p1.vards = "Anna", p1.hp = 100.
  5. Izvada datus un saproti, ka objekti ir patstāvīgi.

2. uzdevums: Klase ar atribūtiem

Pievieno klases atribūtus, kas kopīgi visiem objektiem.

Izpildes soļi:

  1. Klasē Speletajs pievieno klases līmenī: maks_hp = 100 un komanda = "sarkanā".
  2. Izveido 3 objektus, izvada katra komanda — visiem vienāds.
  3. Mainīt klases atribūtu: Speletajs.maks_hp = 200.
  4. Pārbaudi, vai izmaiņa ietekmē visus objektus (jā, ja viņiem nav sava maks_hp).

3. uzdevums: Klase pret vārdnīcu

Salīdzini klašu un vārdnīcu pieeju.

Izpildes soļi:

  1. Izveido funkciju izveidot_speletaju_dict(vards, hp), kas atgriež vārdnīcu.
  2. Izveido klasi ar tādiem pašiem atribūtiem (manuāli iestatot tos pēc objekta izveides).
  3. Salīdzini koda salasāmību — kura forma skaidrāka?
  4. Pievieno funkciju cizt(speletajs, bojajums) — vai tā strādā ar abām formām?
  5. Pieraksti secinājumus: kad lietot vārdnīcu, kad klasi.

Papildus uzdevums: Pielāgojama __repr__ izvade

Pievieno klasei nestandarta tekstuālo reprezentāciju.

Izpildes soļi:

  1. Klasē Speletajs pievieno: def __repr__(self): return f"<Speletajs {self.vards}>"
  2. Izveido objektu un izvada to ar print(p1) un print([p1, p2]).
  3. Salīdzini ar noklusējuma izvadi (bez __repr__).

Biežākās kļūdas

Koda piemērs

class Speletajs:
    """Vienkāršs spēlētāja modelis."""
    maks_hp = 100  # klases atribūts

speletajs1 = Speletajs()
speletajs1.vards = "Anna"
speletajs1.hp = 100

speletajs2 = Speletajs()
speletajs2.vards = "Jānis"
speletajs2.hp = 80

print(f"{speletajs1.vards}: {speletajs1.hp}/{Speletajs.maks_hp}")
print(f"{speletajs2.vards}: {speletajs2.hp}/{Speletajs.maks_hp}")
Anna: 100/100
Jānis: 80/100
⬅ Tēmas apkopojums Nākamā stunda ➡