Mikuláš je tu! Získaj 90 % extra kreditov ZADARMO s promo kódom CERTIK90 pri nákupe od 1 199 kreditov. Len do nedele 7. 12. 2025! Zisti viac:
NOVINKA: Najžiadanejšie rekvalifikačné kurzy teraz s 50% zľavou + kurz AI ZADARMO. Nečakaj, táto ponuka dlho nevydrží! Zisti viac:

Diskusia – 4. diel - Hracia kocka v Pythone - Zapuzdrenie a konštruktor

Späť

Upozorňujeme, že diskusie pod našimi online kurzami sú nemoderované a primárne slúžia na získavanie spätnej väzby pre budúce vylepšenie kurzov. Pre študentov našich rekvalifikačných kurzov ponúkame možnosť priameho kontaktu s lektormi a študijným referentom pre osobné konzultácie a podporu v rámci ich štúdia. Toto je exkluzívna služba, ktorá zaisťuje kvalitnú a cielenú pomoc v prípade akýchkoľvek otázok alebo projektov.

Komentáre
Posledné komentáre sú na spodnej časti poslednej stránky.
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()
Editované
Avatar
hanpari
Člen
Avatar
Odpovedá 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.

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ěď.

Avatar
hanpari
Člen
Avatar
Odpovedá 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í.

Editované
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 :)

Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovedá 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

Editované
Odpovedať
if (this.motto == "") { throw new NotImplementedException(); }
Avatar
Martin Petrovaj
Tvůrce
Avatar
Odpovedá 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:-)

Odpovedať
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.

Avatar
gcx11
Tvůrce
Avatar
Odpovedá na Rudolf Kov
gcx11:2.2.2018 19:19

Ahoj, máš tam

return self.pocet_sten

namísto

return self.__pocet_sten
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

Posledné komentáre sú na spodnej časti poslednej stránky.
Robíme čo je v našich silách, aby bola tunajšia diskusia čo najkvalitnejšia. Preto do nej tiež môžu prispievať len registrovaní členovia. Pre zapojenie sa do diskusie sa zaloguj. Ak ešte nemáš účet, zaregistruj sa, je to zadarmo.

Zobrazené 10 správy z 95.