Stundas uzdevums: Iemācīties pareizi inicializēt objektus, izmantojot __init__ metodi un noklusējuma argumentus.
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ļā.
Manuāli iestatīt katra objekta atribūtus ir kļūdu pilna pieeja. __init__ ir konstruktors - speciāla metode, ko Python automātiski izsauc, kad veido jaunu objektu.
class Dalibnieks:
def __init__(self, vards, energija=100, klase="kapteinis"):
# self ir norāde uz JAUNO objektu
self.vards = vards
self.energija = energija
self.maks_energija = energija
self.klase = klase
self.aktiva = True
def info(self):
return f"{self.vards} ({self.klase}): {self.energija}/{self.maks_energija} enerģija"
# Izveide ar pozicionāliem argumentiem
v1 = Dalibnieks("Marta")
# Izveide ar nosauktiem argumentiem
v2 = Dalibnieks(vards="Jānis", energija=80, klase="prezentetajs")
print(v1.info()) # Marta (kapteinis): 100/100 enerģija
print(v2.info()) # Jānis (prezentetajs): 80/80 enerģija
Atribūtu tipi:
self.x) - katram objektam savs._) - paredzēti tikai iekšējai lietošanai.Š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.2 Konstruktori un atribūti; 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, klase="kapteinis"):
# self ir norāde uz JAUNO objektu
self.vards = vards
self.energija = energija
self.maks_energija = energija
self.klase = klase
self.aktiva = True
def info(self):
return f"{self.vards} ({self.klase}): {self.energija}/{self.maks_energija} enerģija"
# Izveide ar pozicionāliem argumentiem
v1 = Dalibnieks("Marta")
# Izveide ar nosauktiem argumentiem
v2 = Dalibnieks(vards="Jānis", energija=80, klase="prezentetajs")
print(v1.info()) # Marta (kapteinis): 100/100 enerģija
print(v2.info()) # Jānis (prezentetajs): 80/80 enerģija
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.
__init__(self, ...) - vienmēr.klase_atrib = [] tiek dalīts starp objektiem!return self - tas nav pareizi.class Dalibnieks:
def __init__(self, vards, energija=100, klase="kapteinis"):
if energija <= 0:
raise ValueError("Enerģijai jābūt pozitīvai")
if not vards:
raise ValueError("Vārds nedrīkst būt tukšs")
self.vards = vards
self.energija = energija
self.maks_energija = energija
self.klase = klase
v1 = Dalibnieks("Marta")
v2 = Dalibnieks(vards="Jānis", energija=80, klase="prezentetajs")
print(f"{v1.vards}: {v1.energija}/{v1.maks_energija}")
print(f"{v2.vards} ({v2.klase}): {v2.energija}/{v2.maks_energija}")