Tavs šīs stundas izaicinājums: Iemācīties rakstīt metodes, kas modificē objekta stāvokli un mijiedarbojas savā starpā.
Klases metode ir funkcija, kas piesieta objektam. Pirmais parametrs vienmēr ir self — atsauce uz objektu, kura metode tiek izsaukta.
class Varonis:
def __init__(self, vards, hp=100, speks=10):
self.vards = vards
self.hp = hp
self.maks_hp = hp
self.speks = speks
def cizt(self, bojajums):
"""Saņem ievainojumu."""
self.hp = max(0, self.hp - bojajums)
if self.hp == 0:
print(f"{self.vards} ir kritis!")
def uzbrukums(self, merkis):
"""Uzbrūk citam varonim."""
print(f"{self.vards} uzbrūk {merkis.vards} ar {self.speks} bojājumu!")
merkis.cizt(self.speks)
def dziedinas(self, daudzums):
self.hp = min(self.maks_hp, self.hp + daudzums)
# Lietošana
artur = Varonis("Artūrs", hp=120, speks=15)
orks = Varonis("Orks", hp=60, speks=8)
artur.uzbrukums(orks) # Artūrs uzbrūk Orks ar 15 bojājumu!
orks.uzbrukums(artur)
artur.dziedinas(20)
Metodes tipi:
self. Visbiežāk lietotā.cls (klase, nevis objekts).self/cls; vienkārša funkcija klases iekšpusē.Pievieno spēlētāja klasei reālas darbības.
Speletajs pievieno metodi cizt(self, bojajums), kas atņem HP.dziedinas(self, daudzums), kas pievieno HP, bet ne pāri maks_hp.vai_dzivs(self), kas atgriež True/False atkarībā no HP.Divi objekti var komunicēt savā starpā.
uzbrukums(self, merkis), kas izsauc merkis.cizt(self.speks).self.speks atribūtu konstruktorā.while cikls līdz viens nokrīt).print() par notikumiem.Apgūsti dekoratoru lomu.
@classmethod def izveidot_orku(cls): return cls("Orks", hp=50, speks=8)@staticmethod def aprekinat_bojajumu(speks, brunas): return max(1, speks - brunas)orks = Varonis.izveidot_orku() un b = Varonis.aprekinat_bojajumu(15, 5).Padari atribūtus pārvaldītus, piemēram, lai HP nevarētu pārsniegt maksimumu.
@property izveido "viltus" atribūtu, kas iekšēji izpilda kodu.@property def hp(self) un @hp.setter def hp(self, value).v.hp = -50 automātiski iestatīs 0.self atribūta priekšā: def cizt(self, b): hp -= b meklē globālu hp!def cizt(self, hp) ievieš lokālu hp!class Varonis:
def __init__(self, vards, hp=100, speks=10):
self.vards = vards
self.hp = hp
self.speks = speks
def cizt(self, b):
self.hp = max(0, self.hp - b)
if self.hp == 0:
print(f"{self.vards} ir miris!")
def uzbrukums(self, merkis):
print(f"{self.vards} → {merkis.vards}: {self.speks}")
merkis.cizt(self.speks)
art = Varonis("Artūrs", 120, 15)
ork = Varonis("Orks", 50, 8)
while art.hp > 0 and ork.hp > 0:
art.uzbrukums(ork)
if ork.hp > 0:
ork.uzbrukums(art)