Stundas uzdevums: Iemācīties rakstīt metodes, kas modificē objekta stāvokli un mijiedarbojas savā starpā.
70 min darba sadalījums: 1. uzdevums (~20 min) - atjauno teorijas piemēru vai minimālo prototipu; 2. uzdevums (~25 min) - pielieto to galvenajā uzdevumā; 3. uzdevums (~25 min) - pārbaudi rezultātu, izlabo kļūdas un tikai beigās pieraksti vienu secinājumu. Papildus/4. līmeņa uzdevums ir paredzēts tikai tad, ja pamatdarbs ir pabeigts.
Pirms sāc: izmanto iepriekš apgūto un šīs lapas teorijas/koda piemērus. Ja vajadzīga jauna komanda vai rīks, vispirms atrodi tās paraugu teorijas sadaļā.
Klases metode ir funkcija, kas piesieta objektam. Pirmais parametrs vienmēr ir self - atsauce uz objektu, kura metode tiek izsaukta.
class Dalibnieks:
def __init__(self, vards, energija=100, temps=10):
self.vards = vards
self.energija = energija
self.maks_energija = energija
self.temps = temps
def sanem_punktus(self, punkti):
"""Saņem punktu izmaiņas."""
self.energija = max(0, self.energija - punkti)
if self.energija == 0:
print(f"{self.vards} pabeidza raundu!")
def gajiens(self, merkis):
"""Veic gājienu pret citu dalībnieku."""
print(f"{self.vards} veic gājienu pret {merkis.vards} ar {self.temps} punktiem!")
merkis.sanem_punktus(self.temps)
def dziedinas(self, daudzums):
self.energija = min(self.maks_energija, self.energija + daudzums)
# Lietošana
marta = Dalibnieks("Marta", energija=120, temps=15)
nokavets_zvans = Dalibnieks("Nokavēts zvans", energija=60, temps=8)
marta.gajiens(nokavets_zvans) # Marta veic gājienu pret Nokavēts zvans ar 15 punktiem!
nokavets_zvans.gajiens(marta)
marta.dziedinas(20)
Metodes tipi:
self. Visbiežāk lietotā.cls (klase, nevis objekts).self/cls; vienkārša funkcija klases iekšpusē.Šis ir īss iesildīšanās uzdevums. Nokopē sagatavi, ielīmē to pareizajā koda vietā un palaid. Šeit pietiek droši izmēģināt tēmu 11.3 Metodes un self; detalizētu izpratni veidosi nākamajos uzdevumos.
Kopējamais piemērs vai sagatave: izmanto šo bloku kā starta punktu, nevis kā gala risinājumu.
class Dalibnieks:
def __init__(self, vards, energija=100, temps=10):
self.vards = vards
self.energija = energija
self.maks_energija = energija
self.temps = temps
def sanem_punktus(self, punkti):
"""Saņem punktu izmaiņas."""
self.energija = max(0, self.energija - punkti)
if self.energija == 0:
print(f"{self.vards} pabeidza raundu!")
def gajiens(self, merkis):
"""Veic gājienu pret citu dalībnieku."""
print(f"{self.vards} veic gājienu pret {merkis.vards} ar {self.temps} punktiem!")
merkis.sanem_punktus(self.temps)
def dziedinas(self, daudzums):
self.energija = min(self.maks_energija, self.energija + daudzums)
# Lietošana
marta = Dalibnieks("Marta", energija=120, temps=15)
nokavets_zvans = Dalibnieks("Nokavēts zvans", energija=60, temps=8)
marta.gajiens(nokavets_zvans) # Marta veic gājienu pret Nokavēts zvans ar 15 punktiem!
nokavets_zvans.gajiens(marta)
marta.dziedinas(20)
main.py failā un palaid no termināļa.Pievieno šīs stundas objektorientēto paņēmienu kā nelielu, strādājošu projekta daļu.
Speletajs, punkti vai pievieno_punktu().Pārbaudi, vai objekti un metodes darbojas paredzami.
Ja pamatdarbs ir pabeigts, paplašini projektu ar vienu nelielu objektorientētu uzlabojumu.
self atribūta priekšā: def sanem_punktus(self, b): energija -= b meklē globālu energija!def sanem_punktus(self, energija) ievieš lokālu energija!class Dalibnieks:
def __init__(self, vards, energija=100, temps=10):
self.vards = vards
self.energija = energija
self.temps = temps
def sanem_punktus(self, b):
self.energija = max(0, self.energija - b)
if self.energija == 0:
print(f"{self.vards} pabeidza raundu!")
def gajiens(self, merkis):
print(f"{self.vards} → {merkis.vards}: {self.temps}")
merkis.sanem_punktus(self.temps)
marta = Dalibnieks("Marta", 120, 15)
nokavets_zvans = Dalibnieks("Nokavēts zvans", 50, 8)
while marta.energija > 0 and nokavets_zvans.energija > 0:
marta.gajiens(nokavets_zvans)
if nokavets_zvans.energija > 0:
nokavets_zvans.gajiens(marta)