IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Diskusia – 12. diel - Statika v Pythone - Triedne atribúty

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
Avatar
Člen
Člen
Avatar
Člen:18.9.2014 18:45

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

Odpovedať
18.9.2014 18:45
...
Avatar
Rastislav Kish:18.11.2018 17:04

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

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

 
Odpovedať
20.4.2019 20:59
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá 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.

Editované 21.4.2019 12:03
Odpovedať
21.4.2019 12:02
New kid back on the block with a R.I.P
Avatar
jika knaifl
Člen
Avatar
Odpovedá 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.

 
Odpovedať
22.4.2019 11:21
Avatar
David Hartinger
Vlastník
Avatar
Odpovedá 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.

Odpovedať
22.4.2019 12:27
New kid back on the block with a R.I.P
Avatar
gcx11
Tvůrce
Avatar
Odpovedá 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__

Editované 27.5.2019 19:55
 
Odpovedať
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.

Editované 29.3.2020 4:22
 
Odpovedať
29.3.2020 4:20
Avatar
MQ .
Tvůrce
Avatar
Odpovedá 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.

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

 
Odpovedať
7.11.2021 12:51
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.

Zatiaľ nikto nevložil komentár - buď prvý!