NOVINKA: Staň se datovým analytikem od 0 Kč a získej jistotu práce, lepší plat a nové kariérní možnosti. Více informací:

Diskuze – Lekce 12 - Aréna s mágem (dědičnost a polymorfismus)

Zpět

Upozorňujeme, že diskuze pod našimi online kurzy jsou nemoderované a primárně slouží k získávání zpětné vazby pro budoucí vylepšení kurzů. Pro studenty našich rekvalifikačních kurzů nabízíme možnost přímého kontaktu s lektory a studijním referentem pro osobní konzultace a podporu v rámci jejich studia. Toto je exkluzivní služba, která zajišťuje kvalitní a cílenou pomoc v případě jakýchkoli dotazů nebo projektů.

Komentáře
Avatar
Erik Jerie
Člen
Avatar
Erik Jerie:23. ledna 17:42

"Proto si průběžně procvičujte práci s objekty, zkoušejte si naše cvičení a také vymýšlejte své vlastní aplikace, abyste si zažili základní věci. To, že je tu přítomen celý seriál neznamená, že ho celý najednou přečtete a pochopíte. Snažte se programovat průběžně."
A tímhle na začátku lekce jste napravili to, že si tu spousta lidí zoufá, že nejsou k dispozici lehčí cvičení k procvičování? GRATULUJI!
Na vašich složitých cvičeních jsme to nepochopili, tak si to procvičíme na vašich cvičeních. Nestačí? Seženeme si nebo vytvoříme svoje. Vždyť jsme jenom začátečníci, tak to bude brnkačka!

 
Odpovědět
23. ledna 17:42
Avatar
Lenka Matoušková:11. března 13:35

To by bylo tak super, kdyby to někdo postupně vysvětlil ve videu a jednotlivý ten kód popsal proč a jak ho dělá. To by fakt pomohlo...:)

 
Odpovědět
11. března 13:35
Avatar
Jan Duchenka
Člen
Avatar
Jan Duchenka:19. března 14:59

U této lekce, když ji spustim tak mi to ukazuje pokaždé jiné životy u Zalgorena i Gandalfa

 
Odpovědět
19. března 14:59
Avatar
Žaneta Janáčová:9. června 22:00

bylo zmatené co kam zapisovat/opra­vovat. ve třídě bojovník - mág

 
Odpovědět
9. června 22:00
Avatar
Barbora Zdvihalová:28. června 18:53

:D :D :D Ja se musim smat :D
Clovek ma na zvladnuti 41 lekci OOP 14 dni, to jsou 3 lekce na den, coz je dost narocny, i kdyby clovek nepracoval nebo se nemusel starat o deti...
A rada zni "Je to tezky, snazte se programovat prubezne svy vlastni programy, protoze ty nase tady jsou moc narocny" :D
Skvele zvladnutej kurz, moc! :D
Ja chapu, ze se to na nas nikdo jinej nenauci, ale opravdu by neslo alepson prodlouzit ten cas, ktery na to je? :)
Proc chcete zpetnou vazbu, kdyz s tima lekcema nic nedelate? :)

Editováno 28. června 18:56
 
Odpovědět
28. června 18:53
Avatar
DarkCoder
Člen
Avatar
DarkCoder:28. června 20:03

Výuka bude vždy neefektivní, budete-li do výkladu motat věci které nejsou nutné. Jako například herní principy.

Když zmíníte programátorský pojem, tak ho vysvětlete nebo ho vůbec neuvádějte.

V Pythonu jsou všechny metody - řečeno terminologií jazyků C++, C# - virtuální.

Odpovědět
28. června 20:03
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
Lukáš Chaloupek:5. července 21:52

Nejsem si jistý, jestli se zde snažíme pochopit základy OOP. Čím více lekcí, tím větší chaos v hlavě. Programování her mi jako úplnému začátečníkovi moc nepomáhá. Samozřejmě si vše přečtu znovu, ale jsem si jistý, že se základy budu muset doučit jinde, jestli se mi tento kurz podaří zdárně dokončit.

Odpovědět
5. července 21:52
Úspěch není konečný, selhání není fatální. Důležité je mít odvahu pokračovat.
Avatar
Pavel Baru
Člen
Avatar
Pavel Baru:23. července 8:39

Ani po dvacátém přečtení jsem nepochopil, co mi měl tenhle odstavec sdělit. :-D

"U potomků není nutné vždy volat konstruktor předka.
Náš konstruktor musí mít samozřejmě všechny parametry potřebné pro
předka plus ty nové, co má navíc potomek, takže ho volat budeme. Některé
potom předáme předkovi a některé si zpracujeme sami. Konstruktor předka se
vykoná před naším konstruktorem."

 
Odpovědět
23. července 8:39
Avatar
DarkCoder
Člen
Avatar
Odpovídá na Pavel Baru
DarkCoder:23. července 13:03
# Třída předka
class Bojovnik:
    def __init__(self, jmeno, zivoty, utok):
        self.jmeno = jmeno
        self.zivoty = zivoty
        self.utok = utok

    def utoc(self):
        print(f"{self.jmeno} útočí fyzicky za {self.utok} bodů.")

# Následník s magií
class MagickyBojovnik(Bojovnik):
    def __init__(self, jmeno, zivoty, utok, mana, magicky_utok):
        super().__init__(jmeno, zivoty, utok)
        self.mana = mana
        self.magicky_utok = magicky_utok

    def kouzli(self):
        if self.mana >= 10:
            print(f"{self.jmeno} kouzlí za {self.magicky_utok} bodů.")
            self.mana -= 10
        else:
            print(f"{self.jmeno} nemá dostatek many.")

Použití:

bojovnik = Bojovnik("Ragnar", 100, 15)
bojovnik.utoc()

mago = MagickyBojovnik("Merlin", 80, 10, 30, 25)
mago.utoc()     # zděděná metoda
mago.kouzli()   # vlastní metoda
mago.kouzli()
mago.kouzli()   # spotřebuje manu

Když se vytváří instance magického bojovníka, tak:

Krok Co se stane
---- --------------------------------------------------------
1️⃣ Vytvoří se prázdný objekt
2️⃣ Zavolá se __init__ z MagickyBojovnik
3️⃣ super().__init__() nastaví atributy z Bojovnik
4️⃣ MagickyBojovnik přidá další atributy
5️⃣ Vrací se hotová instance s děděnými i novými vlastnostmi
Odpovědět
23. července 13:03
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Avatar
DarkCoder
Člen
Avatar
DarkCoder:23. července 13:22

Jinak tohle je zrovna příklad, kdy dědičnost není vhodná ale používá se kompozice. 😆

Ukázka kompozice:

class FyzickyUtocnik:
    def __init__(self, utok):
        self.utok = utok

    def utoc(self, jmeno):
        print(f"{jmeno} útočí fyzicky za {self.utok}!")

class MagickaSlozka:
    def __init__(self, mana, magicky_utok):
        self.mana = mana
        self.magicky_utok = magicky_utok

    def kouzli(self, jmeno):
        if self.mana >= 10:
            print(f"{jmeno} sesílá kouzlo za {self.magicky_utok}!")
            self.mana -= 10
        else:
            print(f"{jmeno} nemá dostatek many.")

class Lecitel:
    def __init__(self, leciva_sila):
        self.leciva_sila = leciva_sila

    def lec(self, jmeno):
        print(f"{jmeno} léčí spojence za {self.leciva_sila} životů.")

class Postava:
    def __init__(self, jmeno, zivoty):
        self.jmeno = jmeno
        self.zivoty = zivoty
        self.fyzika = None
        self.magie = None
        self.leceni = None

    def nastav_fyziku(self, utok):
        self.fyzika = FyzickyUtocnik(utok)

    def nastav_magii(self, mana, magicky_utok):
        self.magie = MagickaSlozka(mana, magicky_utok)

    def nastav_leceni(self, leciva_sila):
        self.leceni = Lecitel(leciva_sila)

    def utoc(self):
        if self.fyzika:
            self.fyzika.utoc(self.jmeno)
        else:
            print(f"{self.jmeno} neumí fyzicky útočit.")

    def kouzli(self):
        if self.magie:
            self.magie.kouzli(self.jmeno)
        else:
            print(f"{self.jmeno} neumí kouzlit.")

    def lec(self):
        if self.leceni:
            self.leceni.lec(self.jmeno)
        else:
            print(f"{self.jmeno} neumí léčit.")

A použití:

# Čistý bojovník
bojovnik = Postava("Ragnar", 100)
bojovnik.nastav_fyziku(20)

# Magický léčitel
mystik = Postava("Aeris", 80)
mystik.nastav_magii(40, 25)
mystik.nastav_leceni(15)

# Všestranný mág-bojovník
paladin = Postava("Arthas", 120)
paladin.nastav_fyziku(15)
paladin.nastav_magii(30, 20)

# Akce:
bojovnik.utoc()      # Ragnar útočí fyzicky
bojovnik.kouzli()   # Ragnar neumí kouzlit
bojovnik.lec()      # Ragnar neumí léčit

mystik.kouzli()     # Aeris sesílá kouzlo
mystik.lec()        # Aeris léčí spojence
mystik.utoc()       # Aeris neumí fyzicky útočit

paladin.utoc()      # Arthas útočí fyzicky
paladin.kouzli()    # Arthas sesílá kouzlo
paladin.lec()       # Arthas neumí léčit
Odpovědět
23. července 13:22
"I ta nejlepší poučka postrádá na významu, není-li patřičně předána." - DarkCoder
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 42.