NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
S účinností od 26. 3. jsme aktualizovali Zásady zpracování osobních údajů – doplnili jsme informace o monitorování telefonických hovorů se zájemci o studium. Ostatní části zůstávají beze změn.

Diskuze – Lekce 19 - Vlastnosti v Pythonu

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
Patrik Smělý
Tvůrce
Avatar
Patrik Smělý:20.10.2014 14:12

Určitě zajímavé, ale docela by mně zajímalo jak udělat v pythonu deskop aplikaci, s grafickým rozhraním jako je např java swing/fx.

 
Odpovědět
20.10.2014 14:12
Avatar
mkub
Tvůrce
Avatar
Odpovídá na Patrik Smělý
mkub:20.10.2014 14:15

myslim, ze to ide, dokonca v pythone je napisane aj celr desktopove prostredie za pouzitia kniznice PyGTK

 
Odpovědět
20.10.2014 14:15
Avatar
gcx11
Tvůrce
Avatar
Odpovídá na Patrik Smělý
gcx11:20.10.2014 14:26

Předpokládám, že jako v dalším díle začnu psát o tkinteru (což je standartní knihovna většinou přibalovaná k Pythonu). Potom možná o wxPythonu nebo PyQt, které jsou pokročilejší a složitější, ale umí toho víc.

 
Odpovědět
20.10.2014 14:26
Avatar
Člen
Člen
Avatar
Odpovídá na Patrik Smělý
Člen:21.10.2014 13:05

Na vytvorenie aplikácie s GUI je v Pythone knižnica tkinter ;)

Odpovědět
21.10.2014 13:05
...
Avatar
David.Landa
Člen
Avatar
David.Landa:3.2.2015 14:10

Už jsem to psal dnes k jinému dílu (myslím 3.), ale měl sem to napsat sem: Python nemá privátní metody ani atributy. Žádný počet podtržítek nezabrání přístupu k atributu -- dvojité podtržítko přístup jen ztíží, ale obecně je to jen konvence jak označit, že není radno tento atribut používat jen tak.

Editováno 3.2.2015 14:13
 
Odpovědět
3.2.2015 14:10
Avatar
David.Landa
Člen
Avatar
David.Landa:3.2.2015 14:27

Je jistě lepší používat getter/setter před přímým přístupem k atributům, ale použití properties je ještě lepší! Není to jen kratší zápis get/set, vlastně zde je to dokonce více práce (musím psát @property atd.), ale je to více Pythonic, protože přistupuješ zdánlivě jakoby k atributu + pokud se změní třeba způsob validace, pak klient nic nepozná (ale to platí i pro normální set metodu).

viz "V Pythonu se vlastnosti používají, pouze jen pokud jsou nutné."

Editováno 3.2.2015 14:30
 
Odpovědět
3.2.2015 14:27
Avatar
hanpari
Člen
Avatar
Odpovídá na David.Landa
hanpari:3.2.2015 17:20

Ve skutečnosti to není tak "pythonic", jak si myslíš. Ve skutečnosti je to spíš javové :)

Pythonýrské jsou descriptory :)

http://nbviewer.ipython.org/…riteup.ipynb

Múj oblíbený kousek kódu. Všimněte si komentářů nad každou další vlastností :)

class Movie(object):
    def __init__(self, title, rating, runtime, budget, gross):
        self._rating = None
        self._runtime = None
        self._budget = None
        self._gross = None

        self.title = title
        self.rating = rating
        self.runtime = runtime
        self.gross = gross
        self.budget = budget

    #nice
    @property
    def budget(self):
        return self._budget

    @budget.setter
    def budget(self, value):
        if value < 0:
            raise ValueError("Negative value not allowed: %s" % value)
        self._budget = value

    #ok
    @property
    def rating(self):
        return self._rating

    @rating.setter
    def rating(self, value):
        if value < 0:
            raise ValueError("Negative value not allowed: %s" % value)
        self._rating = value

    #uhh...
    @property
    def runtime(self):
        return self._runtime

    @runtime.setter
    def runtime(self, value):
        if value < 0:
            raise ValueError("Negative value not allowed: %s" % value)
        self._runtime = value

    #is this forever?
    @property
    def gross(self):
        return self._gross

    @gross.setter
    def gross(self, value):
        if value < 0:
            raise ValueError("Negative value not allowed: %s" % value)
        self._gross = value

    def profit(self):
        return self.gross - self.budget
 
Odpovědět
3.2.2015 17:20
Avatar
David.Landa
Člen
Avatar
David.Landa:3.2.2015 18:04

Porovnávam get/set vzhledem k properties. Preferuji properties, před get/set, protože v základu dělají to samé, ale vypadají lépe, když je klient třídy používá. Get/Set je možná relikt Javy a properties C#, ale i v pythonu jsou lepší. Deskriptor je možná ještě lepší, nevím -- nepoužívám. Reagoval jsem na to, že properties jsou více Pythonic než get/set. V článku to vyznívá, že se moc nepoužívají.

Editováno 3.2.2015 18:09
 
Odpovědět
3.2.2015 18:04
Avatar
hanpari
Člen
Avatar
Odpovídá na David.Landa
hanpari:3.2.2015 18:11

V pohode ten odkaz je tutorial muzes na nej podivat

 
Odpovědět
3.2.2015 18:11
Avatar
David.Landa
Člen
Avatar
David.Landa:3.2.2015 18:21

Properties jsou implementované pomocí desktriptorů. Nic proti nim, já je prostě nepoužívám. Ale @property je standardní a preferované oproti get/set na tom trvám .)

 
Odpovědět
3.2.2015 18:21
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 37.