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

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

 
Odpovedať
20.10.2014 14:12
Avatar
mkub
Tvůrce
Avatar
Odpovedá 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

 
Odpovedať
20.10.2014 14:15
Avatar
gcx11
Tvůrce
Avatar
Odpovedá 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.

 
Odpovedať
20.10.2014 14:26
Avatar
Člen
Člen
Avatar
Odpovedá na Patrik Smělý
Člen:21.10.2014 13:05

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

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

Editované 3.2.2015 14:13
 
Odpovedať
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é."

Editované 3.2.2015 14:30
 
Odpovedať
3.2.2015 14:27
Avatar
hanpari
Člen
Avatar
Odpovedá 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
 
Odpovedať
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í.

Editované 3.2.2015 18:09
 
Odpovedať
3.2.2015 18:04
Avatar
hanpari
Člen
Avatar
Odpovedá na David.Landa
hanpari:3.2.2015 18:11

V pohode ten odkaz je tutorial muzes na nej podivat

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

 
Odpovedať
3.2.2015 18:21
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ý!