NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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 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
Avatar
Člen
Člen
Avatar
Člen:18.9.2014 18:45

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

Odpovědět
18.9.2014 18:45
...
Avatar
Rastislav Kish:18.11.2018 17:04

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

 
Odpovědět
18.11.2018 17:04
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

 
Odpovědět
20.4.2019 20:59
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 21.4.2019 12:03
Odpovědět
21.4.2019 12:02
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.

 
Odpovědět
22.4.2019 11:21
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
22.4.2019 12:27
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 27.5.2019 19:55
 
Odpovědět
27.5.2019 19:55
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 29.3.2020 4:22
 
Odpovědět
29.3.2020 4:20
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.

 
Odpovědět
29.3.2020 20:53
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

 
Odpovědět
7.11.2021 12:51
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.