Tavs šīs stundas izaicinājums: Iemācīties pareizi inicializēt objektus, izmantojot __init__ metodi un noklusējuma argumentus.
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 Varonis:
def __init__(self, vards, hp=100, klase="bruninieks"):
# self ir norāde uz JAUNO objektu
self.vards = vards
self.hp = hp
self.maks_hp = hp
self.klase = klase
self.dziva = True
def info(self):
return f"{self.vards} ({self.klase}): {self.hp}/{self.maks_hp} HP"
# Izveide ar pozicionāliem argumentiem
v1 = Varonis("Artūrs")
# Izveide ar nosauktiem argumentiem
v2 = Varonis(vards="Merlins", hp=80, klase="burvis")
print(v1.info()) # Artūrs (bruninieks): 100/100 HP
print(v2.info()) # Merlins (burvis): 80/80 HP
Atribūtu tipi:
self.x) — katram objektam savs._) — paredzēti tikai iekšējai lietošanai.Pārveido iepriekšējās stundas klasi, lai izmanto __init__.
class Speletajs ar __init__(self, vards, hp=100).self.vards, self.hp, self.maks_hp.Pievieno argumentu validāciju.
__init__ sākumā: ja hp <= 0, izmet raise ValueError("HP jābūt pozitīvam").not vards), izmet ValueError.try/except bloku, kurš noķer šīs kļūdas un parāda lietotājam.Eksperimentē ar klases vs objekta atribūtiem.
visi_speletaji = [].Speletajs.visi_speletaji.append(self).for s in Speletajs.visi_speletaji: print(s.vards).Atklāj Python automātisko klases ģenerēšanu.
from dataclasses import dataclass@dataclass class Speletajs: vards: str; hp: int = 100__repr__.__init__(self, ...) — vienmēr.klase_atrib = [] tiek dalīts starp objektiem!return self — tas nav pareizi.class Varonis:
def __init__(self, vards, hp=100, klase="bruninieks"):
if hp <= 0:
raise ValueError("HP jābūt pozitīvam")
if not vards:
raise ValueError("Vārds nedrīkst būt tukšs")
self.vards = vards
self.hp = hp
self.maks_hp = hp
self.klase = klase
v1 = Varonis("Artūrs")
v2 = Varonis(vards="Merlins", hp=80, klase="burvis")
print(f"{v1.vards}: {v1.hp}/{v1.maks_hp}")
print(f"{v2.vards} ({v2.klase}): {v2.hp}/{v2.maks_hp}")