Stundas uzdevums: Izprast polimorfismu un Python speciālās ("dunder") metodes objektu pielāgošanai.
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ļā.
Polimorfisms = daudzas formas. Dažādas klases ar to pašu metodes nosaukumu, bet atšķirīgu uzvedību.
class Dalibnieks:
def runa(self): print("Dalibnieks runā vispārīgi.")
class Prezentetajs(Dalibnieks):
def runa(self): print("Slaids ir gatavs, un neviens nepaniko!")
class Kapteinis(Dalibnieks):
def runa(self): print("Komanda gatava, marķieris atrasts!")
# Polimorfisms - vienots interfeiss, dažāda uzvedība
for v in [Dalibnieks(), Prezentetajs(), Kapteinis()]:
v.runa()
Dunder metodes (double underscore) ir iebūvētie āķi, kas ļauj klasei darboties ar Python operatoriem un funkcijām:
| Metode | Aktivizē |
|---|---|
__str__ | str(o) un print(o) |
__repr__ | repr(o), REPL izvade |
__eq__ | o1 == o2 |
__lt__, __gt__ | <, > (sortēšana) |
__add__ | o1 + o2 |
__len__ | len(o) |
__contains__ | x in o |
Š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.5 Polimorfisms un dunder metodes; 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 runa(self): print("Dalibnieks runā vispārīgi.")
class Prezentetajs(Dalibnieks):
def runa(self): print("Slaids ir gatavs, un neviens nepaniko!")
class Kapteinis(Dalibnieks):
def runa(self): print("Komanda gatava, marķieris atrasts!")
# Polimorfisms - vienots interfeiss, dažāda uzvedība
for v in [Dalibnieks(), Prezentetajs(), Kapteinis()]:
v.runa()
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.
str, citādi TypeError.__hash__ = None.__lt__, __eq__ - vienmēr return True/False.class Dalibnieks:
def __init__(self, vards, energija): self.vards = vards; self.energija = energija
def __str__(self): return f"{self.vards} ({self.energija} enerģija)"
def __repr__(self): return f"Dalibnieks({self.vards!r}, energija={self.energija})"
def __lt__(self, other): return self.energija < other.energija
def __eq__(self, other): return self.energija == other.energija
dalibnieki = [Dalibnieks("Anna", 100), Dalibnieks("Jānis", 80), Dalibnieks("Eva", 120)]
for v in sorted(dalibnieki):
print(v)