Stundas uzdevums: Apgūt klašu hierarhiju, izveidojot specializētas bērna klases ar mantotu un papildinātu uzvedību.
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ļā.
Mantošana ļauj izveidot specializētas klases no vispārējām. Vecāku klase satur kopīgo loģiku, bērna klase pievieno specifisko.
class Dalibnieks:
def __init__(self, vards, energija=100, temps=10):
self.vards = vards
self.energija = energija
self.temps = temps
def gajiens(self, merkis):
merkis.energija -= self.temps
class Prezentetajs(Dalibnieks):
def __init__(self, vards, idejas=50):
# Izsauc vecāku konstruktoru
super().__init__(vards, energija=80, temps=5)
self.idejas = idejas # papildu atribūts
def prezentacija(self, merkis):
if self.idejas >= 10:
self.idejas -= 10
merkis.energija -= 25
print(f"{self.vards} parāda slaidu! ({merkis.vards} -25)")
else:
print("Pietrūkst ideju!")
class Kapteinis(Dalibnieks):
def __init__(self, vards):
super().__init__(vards, energija=150, temps=18)
self.stabilitate = 5
# Pārraksta vecāku metodi (override)
def sanem_punktus(self, b):
b = max(0, b - self.stabilitate) # stabilitāte mazina punktu zudumu
super().sanem_punktus(b)
m = Prezentetajs("Jānis")
b = Kapteinis("Anna")
m.prezentacija(b)
isinstance(m, Dalibnieks) atgriež True, jo Prezentetajs ir Dalibnieks.
Š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.4 Mantošana un super(); 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.temps = temps
def gajiens(self, merkis):
merkis.energija -= self.temps
class Prezentetajs(Dalibnieks):
def __init__(self, vards, idejas=50):
# Izsauc vecāku konstruktoru
super().__init__(vards, energija=80, temps=5)
self.idejas = idejas # papildu atribūts
def prezentacija(self, merkis):
if self.idejas >= 10:
self.idejas -= 10
merkis.energija -= 25
print(f"{self.vards} parāda slaidu! ({merkis.vards} -25)")
else:
print("Pietrūkst ideju!")
class Kapteinis(Dalibnieks):
def __init__(self, vards):
super().__init__(vards, energija=150, temps=18)
self.stabilitate = 5
# Pārraksta vecāku metodi (override)
def sanem_punktus(self, b):
b = max(0, b - self.stabilitate) # stabilitāte mazina punktu zudumu
super().sanem_punktus(b)
m = Prezentetajs("Jānis")
b = Kapteinis("Anna")
m.prezentacija(b)
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.
super().method().class Dalibnieks:
def __init__(self, vards, energija=100, temps=10):
self.vards = vards
self.energija = energija
self.temps = temps
class Kapteinis(Dalibnieks):
def __init__(self, vards):
super().__init__(vards, energija=150, temps=18)
self.stabilitate = 5
def sanem_punktus(self, b):
b = max(0, b - self.stabilitate)
self.energija = max(0, self.energija - b)
print(f"{self.vards} stabilitāte mazināja punktu zudumu; atlikusī enerģija {self.energija}")
anna = Kapteinis("Anna")
anna.sanem_punktus(20) # stabilitāte samazina zudumu par 5 punktiem
print(f"isinstance(anna, Dalibnieks) = {isinstance(anna, Dalibnieks)}")