NOVINKA - Online rekvalifikační kurz Python programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze – Lekce 3 - Hrací kostka v Pythonu - Zapouzdření a konstruktor

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
David.Landa
Člen
Avatar
David.Landa:3.2.2015 12:17

Python nemá privátní atributy ani metody!

class A(object):

    def __private(self):
        print("--private--")

a = A()
print(A.__dict__.keys()) #>> slovník
a._A__private()
Editováno 3.2.2015 12:20
 
Odpovědět
3.2.2015 12:17
Avatar
hanpari
Člen
Avatar
Odpovídá na Jiko
hanpari:3.2.2015 12:23

Metoda bude dělat to, co jí řekneš, aby dělala. V tomto případě využívá znalost vnitřního stavu kostky, tj. kolik má kostka stěn.

pro 10-stěnnou kostku bude vědět, že má generovat od 1 do 10, pro šestistěnnou zase 1 do 6.

 
Odpovědět
3.2.2015 12:23
Avatar
theeyeball
Člen
Avatar
theeyeball:16.8.2017 15:15

Ahoj,
jak prosím zjistím při vytváření objektu, jaké má třída atributy?
Používám defaultní pythonovské IDLE, ale když např. vytvářím tu desetičlennou kostku, jak mám vědět, že je tam atribut počet stěn?
Jsem zvyklý z Visual studia u c#, že se tam objevil našeptávač.

Děkuji, za případnou odpověď.

 
Odpovědět
16.8.2017 15:15
Avatar
hanpari
Člen
Avatar
Odpovídá na theeyeball
hanpari:16.8.2017 22:05

Idle není Visual Studio a Python není C#. Idle je rychlé a jednoduché. Nejrychlejší způsob, jak se v Idle dostat k nápovědě, je F5. Idle potřebuje kód alespoň jednou spustit. Jinak se v nastavení podívej, jakou klávesovou zkratku máš u force-open-calltips. Většinou to je Ctrl+\, což je třeba na mojí klávesnici problém, protože mám zdvojený backspace. Proto je lepší si toto předefinovat.

Popřípadě můžeš zkusit plnohodnodnotné IDE jako je PyCharm Community nebo VS Code s vhodným rozšířením. Ale Idle je fajn na zkoušení.

Editováno 16.8.2017 22:06
 
Odpovědět
16.8.2017 22:05
Avatar
brevnovak
Člen
Avatar
brevnovak:22.1.2018 15:33

Samozřejmě jako první parametr píšeme self

to mi samozrejmy neprijde. ja doted delal v jave a tohle tam není. proc je tam ten parametr nutny? dik :)

 
Odpovědět
22.1.2018 15:33
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na brevnovak
Martin Petrovaj:22.1.2018 17:47

Z predchádzajúceho dielu:

První povinný poziční argument je self. Do něj se vloží "odkaz" na objekt, do kterého metoda náleží. Tento argument tam vloží sám objekt.

Jednoducho povedané, v Pythone je volanie metódy na inštancii v podstate syntactic sugar pre volanie metódy na triede, kde prvým parametrom je inštancia. Viem, zložité, ale na tomto príklade si to snáď predstavíš lepšie:

class Test:

        def vypis_triedou(text):
                print(text)

        def vypis_instanciou(self, text):
                print(text)

        def vypis_vsetko(self, text):
                print(f"{self}\n{text}")


Test.vypis_triedou("Ahoj")
Test.vypis_instanciou("Ahoj")   // vyhodí TypeError, čaká 2 argumenty (self, text), dostane 1 (text)

inst = Test()
inst.vypis_triedou("Hey")       // vyhodí TypeError, čaká 1 arg (text), dostane 2 (self - odkaz na objekt 'inst', text)
inst.vypis_instanciou("Hey")


// zápisy Test.vypis_instanciou(inst, "Ahoj") a inst.vypis_instanciou("Ahoj") sú ekvivalentné

inst.vypis_vsetko("Hello!")     // pre zaujímavosť môžeš ešte vyskúšať toto

Pre viac informácií si skús prečítať napr. toto vlákno:
https://stackoverflow.com/…pose-of-self

Editováno 22.1.2018 17:48
Odpovědět
22.1.2018 17:47
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovídá na Martin Petrovaj
Martin Petrovaj:22.1.2018 19:43

Musím sa ešte ospravedlniť za použitie lomítiek namiesto hashtagov pre komentáre, Python používam len tu-tam a nevšimol som si to včas O:-)

Odpovědět
22.1.2018 19:43
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Rudolf Kov
Člen
Avatar
Rudolf Kov:30.1.2018 21:16

Nevíte někdo prosím, co tu mám špatně? Dělal jsem to přesně podle toho návodu, ale pokaždý to napíše chybu:
AttributeError: 'Kostka' object has no attribute 'pocet_sten'
můj kód:
class Kostka:
def __init__(self, pocet_sten=6):
self.__pocet_sten=po­cet_sten
def vrat_pocet_sten(sel­f):
return self.pocet_sten

sestistenna=Kos­tka()
desetistenna=Kos­tka(10)
print(sestisten­na.vrat_pocet_sten())
print(desetis­tenna.vrat_po­cet_sten())
input()

Předem děkuji za odpověd.

 
Odpovědět
30.1.2018 21:16
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Rudolf Kov
gcx11:2.2.2018 19:19

Ahoj, máš tam

return self.pocet_sten

namísto

return self.__pocet_sten
 
Odpovědět
2.2.2018 19:19
Avatar
Jiří Forst
Člen
Avatar
Jiří Forst:27.7.2018 17:56

Čauky
Prosím poraďte mi nevyznám se co znamená {0}
Dík ,
return str("Kostka s {0} stěnami".format(self

 
Odpovědět
27.7.2018 17:56
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 87.