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 – 13. 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
Posledné komentáre sú na spodnej časti poslednej 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
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é
Odpovedať
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.

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

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

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 35.