Hledáš dárek, který neskončí v koši? Nyní 90 % extra kreditů ZDARMA s promo kódem PREKVAPENI90. Zjisti více:
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 13 - Statika v Pythonu - Třídní atributy

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
Nejnovější komentáře jsou na konci poslední stránky.
Avatar
Člen
Člen
Avatar
Člen:18.9.2014 18:45

Zase vydarený článok zo série Python ;)

Avatar
Rastislav Kish:18.11.2018 17:04

Pri privátnej dalsi_id chýba __, ale ináč super. :)

Avatar
jika knaifl
Člen
Avatar
jika knaifl:20.4.2019 20:59

Chtel bych se zeptat, k cemu je tam to @staticmethod. Protoze k zakazani instanciace to evidentne neni, jak jsem zjistil (k tomu slouzi vynechani argumentu self):

@staticmethod
def zvaliduj_heslo(sel­f, heslo):
if len(self.heslo) >= Uzivatel.mini­malni_delka_hes­la:
return True
else:
return False

uzivatel0 = Uzivatel("Tomas Samot", "heslojeveslo")

print(uzivatel0­.zvaliduj_hes­lo(uzivatel0, uzivatel0.heslo))
#tento radek mi nevyhodi chybu, ackoli jsem dal @staticmethod (diky tomu, ze jsem dal self do argumentu)

Rikam to spravne?

Diky

Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na jika knaifl
David Hartinger:21.4.2019 12:02

Pokud jsi článek četl, tak bys to měl vědět, cituji:

Statické metody se volají na třídě. Jedná se zejména o pomocné metody, které potřebujeme často používat a nevyplatí se nám tvořit instanci.

Nevím jak jsi přišel na to, že @staticmethod zakazuje instanciaci, musel jsi asi polovinu textu přeskočit nebo fakt nevím. Staticmethod voláš na class, to je to s velkým písmenem, ty to voláš na uzivatel0, to je instance, navíc jsi tam dal self.

Editováno
Odpovědět
New kid back on the block with a R.I.P
Avatar
jika knaifl
Člen
Avatar
Odpovídá na David Hartinger
jika knaifl:22.4.2019 11:21

Pardon, celé jsem to popletl, už tomu rozumím. A přece: jde v Pythonu utvořit třída, ve které by šlo instaciaci skutečně zakázat?

Děkuji a omlouvám se.

Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na jika knaifl
David Hartinger:22.4.2019 12:27

Na to nativně asi nic není, ale můžeš v konstruktoru té třídy vyvolat výjimku, čímž pak prakticky instanciovat nepůjde.

Odpovědět
New kid back on the block with a R.I.P
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na jika knaifl
gcx11:27.5.2019 19:55

Ahoj, pokud něco takového budeš implementovat, tak je lepší použít __new__ než __init__

Editováno
Avatar
Marty
Člen
Avatar
Marty:29.3.2020 4:20

Jen otázka ohledně Pycharmu. Pokud se může používat tohle:

class Trida:

    def nejaka_funkce():
        print("Tahle funkce je ve třídě!")

    def jina_funkce(text):
        print("Tahle funkce je také ve třídě!")
        print("Text je:", text)

Proč mi pak Pycharm označuje chybu v prázdných závorkách u nejaka_funkce()? U jina_funkce(text) mi zase argument text vidí jakoby to bylo self (obarvuje mi to stejně jako slovíčko self). Teprve když nad obě funkce dám @staticmethod, pak je podle něj vše v pořádku. Samozřejmě bez problému po spuštění proběhnou obě varianty - s dekorátorem, i bez.

Je to tedy jen chyba Pycharmu?

Díky.

Editováno
Avatar
MQ .
Tvůrce
Avatar
Odpovídá na Marty
MQ .:29.3.2020 20:53

Ahoj, pokud vím, tak funkce pod třídou musí mít jako první parametr instanci třídy, nejpoužívanější název tohoto parametru je právě self, a ty ho tam nemáš. Asi po tobě chce nějákou konzistenci v kódu a dodržovat standardy, proto si stěžuje.

Avatar
Jakub Vokáč:7.11.2021 12:51

Ahoj. Chtel bych si overit jestli chapu spravne pouziti tridni metody:
Mam tridu se soukromou tridni promennou a tridni metodou, ktera tu promennou vraci.
Potom mam zdedenou tridu od te prvni tridy, ktera ma zdedenou stejnou metodu a promennou, promenna vsak bude mit jinou hodnotu.
Pri volani tridni metody se mi vrati hodnota promenne podle toho nad kterou z techto 2 trid metodu pouziju.
Kdybych pouzil statickou metodu, vrati se mi hodnota promenne z tridy uvedene natvrdo v metode, at ji vykonam nad jakoukoli z techto 2 trid.
Je to tak?
Diky

Nejnovější komentáře jsou na konci poslední stránky.
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 35.