Zarábaj až 6 000 € mesačne! Akreditované rekvalifikačné kurzy od 0 €. Viac informácií.

Diskusia – 18. diel - Vlastnosti v Pythone

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
hanpari
Člen
Avatar
Odpovedá na David.Landa
hanpari:3.2.2015 20:31

Ahoj, napřed trochu organizační. Dávej prosím tlačítko odpovědět, ať vím, že mám reagovat.

Jinak se samozřejmě s tebou nepřu. Pokud už musím používat třídy (a ne že bych se tomu nevyhýbal :) ), pak bych použil dekoratér property.

Na druhou stranu je fakt, že když o tom tak přemýšlím, všechny moduly, se kterými jsem naposled dělal, buď vlastnosti neměly vůbec, nebo je mají nějak prapodivně, viz například tkinter nebo turtle.

Takže asi záleží na vkusu. Moje je doporučení ohledně OOP: když to není nutné, tak se mu vyhněte :)

 
Odpovedať
3.2.2015 20:31
Avatar
David.Landa
Člen
Avatar
Odpovedá na hanpari
David.Landa:3.2.2015 21:47

Díky za reakci, doufám, že to takhle je OK.

 
Odpovedať
+1
3.2.2015 21:47
Avatar
Otík Rampouch:20.6.2018 14:29

Pokud byste to někdo zkoušeli jako já ve dvojkovém pythonu, tak třída, která má vevnitř @properties dekorátor, musí dědit z object. Třeba tím někomu ušetřím pár minut času stráveného hledáním.

 
Odpovedať
20.6.2018 14:29
Avatar
SVARCICEK
Člen
Avatar
SVARCICEK:7.1.2020 14:10

Jenom borci, opravte to vek=18 na vek=>18

 
Odpovedať
+1
7.1.2020 14:10
Avatar
Filip Širůček:11.10.2020 19:38

Ahoj pro pochopení logiky určitě super ale mám věcný dotaz nebo poznámku. Co kdybych použil pro ukládání hodnot databázi a pro zachování vnitřního stavu bych použil třeba kalkulované pole nebo trigger na tabulce Studenti. Pak se o to nemusí starat python, databáze má k tomu taky hodně nástrojů (constraints atd). Ale to je obecně otázka o co se stará při ukládání aplikace a o co třeba databáze. Sám nevím kdybych co použil protože nejsem db vývojář. Asi je to teda o tom kde je aplikační logika jestli v aplikaci nebo v databázi nebo částečně tam i tam. Díky za názory.

 
Odpovedať
11.10.2020 19:38
Avatar
Antonín Martykán:14.5.2021 10:18

Nerozumím následujícím řádkům:

Stejně můžeme pochopitelně implementovat i vlastní getter a například něco někam logovat:

@nazev_vlastnosti.getter
def nazev_vlastnosti(self):
    return soukromy_atribut_vlastnosti

Nejdřív jsme vytvořili vlastnost, (dekorovali jsme ji @property) která umožní navrátit privátní atribut. Proč bychom teď měli používat další dekorátor @nazev_vlastnos­ti.getter, který bude dělat to samé jako už vytvořená vlastnost? (= vracet privátní atribut)

 
Odpovedať
+2
14.5.2021 10:18
Avatar
Jakub Vokáč:14.11.2021 13:27

Ahoj.
Pokud chci k privatnim atributum objektu pristupovat pres slovnik __dict__ jak je uvedeno v clanku:

nazev_objektu.__dict__["nazev_promenne"] # čtení
nazev_objektu.__dict__["nazev_promenne"] = hodnota # zápis

ocekaval bych, ze v pripade, kdy mam nejakou takovou obecnou tridu (a objekt 'x' z ni vytvoreny):

class Trida:
    def __init__(self, hodnota):
        self.__cislo = hodnota

x = Trida(666)

je klic k hodnote priv. atributu "__cislo"
Ale neni. Je to "_Trida__cislo":

print(x.__dict__['__cislo']) # vyhodi vyjimku KeyError: '__cislo'
print(x.__dict__['_Trida__cislo']) # vypise ocekavane 666

Da se na to prijit tim ,ze se necha vypsat cely slovnik:

print(x.__dict__) # vypise slovnik {'_Trida__cislo': 666}

Syntaxe nazvu klice je shodna s v clanku uvedenou technikou komoleni jmen:

x._Trida__cislo

V clanku je ovsem syntaxe, ktera nefungovala:

objekt.__NazevTridy_nazevatributu

Funkcni byla az po prohozeni podtrzitek. Prvni jednoduche, druhe dvojite:

objekt._NazevTridy__nazevatributu

Myslim, ze by se tyto informace mohly nekomu dalsimu hodit.
Je to tak v pythonu 3.8.10.

 
Odpovedať
14.11.2021 13:27
Avatar
Ctibor Hlaváč:6.6.2022 16:13

Jestli to bylo pro to, aby student musel použít hlavu, pak je to geniální.

def vrat_plnoletos­t(self):
return self.__plnoletost
mělo by být =>
def vrat_plnoletos­t(self):
return self.__plnolety

 
Odpovedať
6.6.2022 16:13
Avatar
Marie Formánková:24.11.2022 15:31

První kód třídy student mi nepřijde správně zapsán - háže mi to SyntaxError: invalid syntax

 
Odpovedať
24.11.2022 15:31
Avatar
Marie Formánková:24.11.2022 15:36

*chyba nalezena, takže beru zpět :)

 
Odpovedať
24.11.2022 15:36
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 37.