abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
AbcLinuxu hledá autory!
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×

dnes 05:55 | Zajímavý projekt

Dle příspěvku na blogu zaměstnanců CZ.NIC byl spuštěn ostrý provoz služby Honeypot as a Service (HaaS). Zapojit se může kdokoli. Stačí se zaregistrovat a nainstalovat HaaS proxy, která začne příchozí komunikaci z portu 22 (běžně používaného pro SSH) přeposílat na server HaaS, kde honeypot Cowrie (GitHub) simuluje zařízení a zaznamenává provedené příkazy. Získat lze tak zajímavé informace o provedených útocích. K dispozici jsou globální statistiky.

Ladislav Hagara | Komentářů: 0
dnes 04:44 | Komunita

Před týdnem společnost Feral Interactive zabývající se vydáváním počítačových her pro operační systémy macOS a Linux oznámila, že pro macOS a Linux vydají hru Rise of the Tomb Raider. Včera společnost oznámila (YouTube), že pro macOS a Linux vydají také hru Total War Saga: Thrones of Britannia. Verze pro Windows by měla vyjít 19. dubna. Verze pro macOS a Linux krátce na to.

Ladislav Hagara | Komentářů: 0
včera 21:33 | Nová verze

Byla vydána nová major verze 7.10 svobodného systému pro řízení vztahů se zákazníky (CRM) s názvem SuiteCRM (Wikipedie). Jedná se o fork systému SugarCRM (Wikipedie). Zdrojové kódy SuiteCRM jsou k dispozici na GitHubu pod licencí AGPL.

Ladislav Hagara | Komentářů: 0
včera 16:44 | Nová verze

Byla vydána nová verze 0.30 display serveru Mir (Wikipedie) a nová verze 2.31 nástrojů snapd pro práci s balíčky ve formátu snap (Wikipedie). Z novinek Miru vývojáři zdůrazňují vylepšenou podporu Waylandu nebo možnost sestavení a spouštění Miru ve Fedoře. Nová verze snapd umí Mir spouštět jako snap.

Ladislav Hagara | Komentářů: 0
včera 14:00 | Komunita

Na Indiegogo běží kampaň na podporu Sway Hackathonu, tj. pracovního setkání klíčových vývojářů s i3 kompatibilního dlaždicového (tiling) správce oken pro Wayland Sway. Cílová částka 1 500 dolarů byla vybrána již za 9 hodin. Nový cíl 2 000 dolarů byl dosažen záhy. Vývojáři přemýšlejí nad dalšími cíli.

Ladislav Hagara | Komentářů: 1
včera 11:11 | Nasazení Linuxu

Před dvěma týdny se skupina fail0verflow (Blog, Twitter, GitHub) pochlubila, že se jim podařilo dostat Linux na herní konzoli Nintendo Switch. O víkendu bylo Twitteru zveřejněno další video. Povedlo se jim na Nintendo Switch rozchodit KDE Plasmu [reddit].

Ladislav Hagara | Komentářů: 3
včera 05:55 | Komunita

Byla vydána vývojová verze 3.2 softwaru Wine (Wikipedie), tj. softwaru, který vytváří aplikační rozhraní umožňující chod aplikací pro Microsoft Windows také pod GNU/Linuxem. Z novinek lze zdůraznit například podporu HID gamepadů. Aktuální stabilní verze Wine je 3.0, viz verzování. Nejistá je budoucnost testovací větve Wine Staging s řadou experimentálních vlastností. Současní vývojáři na ni již nemají čas. Alexandre Julliard, vedoucí projektu Wine, otevřel v diskusním listu wine-devel diskusi o její budoucnosti.

Ladislav Hagara | Komentářů: 2
18.2. 16:55 | Komunita

Do 22. března se lze přihlásit do dalšího kola programu Outreachy (Wikipedie), jehož cílem je přitáhnout do světa svobodného a otevřeného softwaru lidi ze skupin, jež jsou ve světě svobodného a otevřeného softwaru málo zastoupeny. Za 3 měsíce práce, od 14. května do 14. srpna 2018, v participujících organizacích lze vydělat 5 500 USD.

Ladislav Hagara | Komentářů: 53
17.2. 15:44 | Komunita

Nadace The Document Foundation (TDF) zastřešující vývoj svobodného kancelářského balíku LibreOffice dnes slaví 6 let od svého oficiálního vzniku. Nadace byla představena 28. září 2010. Formálně ale byla založena až 17. února 2012. Poslední lednový den byl vydán LibreOffice 6.0. Dle zveřejněných statistik byl za dva týdny stažen již cca milionkrát.

Ladislav Hagara | Komentářů: 1
17.2. 04:44 | Bezpečnostní upozornění

CSIRT.CZ upozorňuje, že byla vydána nová verze 1.2.3 svobodného routovacího démona Quagga (Wikipedie) přinášející několik bezpečnostních záplat. Při nejhorší variantě může dojít až k ovládnutí běžícího procesu, mezi dalšími možnostmi je únik informací z běžícího procesu nebo odepření služby DoS. Konkrétní zranitelnosti mají následující ID CVE-2018-5378, CVE-2018-5379, CVE-2018-5380 a CVE-2018-5381.

Ladislav Hagara | Komentářů: 0
Který webový vyhledávač používáte nejčastěji?
 (2%)
 (28%)
 (62%)
 (2%)
 (3%)
 (1%)
 (1%)
 (1%)
Celkem 385 hlasů
 Komentářů: 34, poslední 14.2. 18:44
    Rozcestník

    Dotaz: Python - prace s pameti

    20.8.2012 13:35 George O.
    Python - prace s pameti
    Přečteno: 810×
    Příloha:
    Zdravim, nedavno jsem tu resil parsovani html documentu, avsak jsem se dostal jakozto python zelenac do situace, kterou neumim resit, protoze presne nechapu, jak python pracuje s pameti, konkretne kopirovani obsahu vs adresy nebo aspon myslim, ze prave tohle je pricinou nespravne funkcnosti me casti kodu.

    V priloze jsou dva kratke soubory a to "test.py", ktery predstavuje funkcni, ale neefektivni reseni pres n-dimenzni pole a "test2.py" reseni, ktere chci realizovat, ale je ponekud nefukcni - chovani je vysvetleno na poslednim radku v komentari:-)

    Vsem moc diky za cas a pomoc:-)

    PS: nemuzu vlozit vice, jak jednu prilohu, takze "test2.py" bude v reakci.

    Odpovědi

    20.8.2012 13:35 George O.
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Příloha:
    Zde je test2.py
    20.8.2012 16:27 l4m4
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Mi se to teda moc nechce číst...

    Jednak tam máš problém s defaultními hodnotami argumentů, které jsou modifikovatelné typy (attrs = {}). Ta defaultní hodnota je konkrétní modifikovatelný objekt, takže zkus:
    def f(x, a=[]):
        a.append(x)
        print(len(a))
    
    f(1)
    f('ble')
    f(None)
    
    Dále:

    Všechno se předává referencí. Tedy všechno s čím pracuješ, jsou jména objektů, ne hodnoty.

    Existují modifikovatelné a nemodifikovatelné objekty.

    Nemodifikovatelné (např. čísla, stringy, None, ...) se chovají de facto jako hodnoty, ale právě jen proto, že nejdou modifikovat. Po x=1 jsou x a 1 jen jiná jména pro týž objekt. Po x+=1 bude x jméno pro jiný nemodifikovatelný objekt, nezmění se žádná hodnota x.

    A u modifikovatelných je to pak samozřejmě velký rozdíl. Chceš-li kopii, použij modul copy (např.).
    pavlix avatar 21.8.2012 08:26 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Všechno se předává referencí. Tedy všechno s čím pracuješ, jsou jména objektů, ne hodnoty.
    Technicky vzato se vše předává hodnotou, která obsahuje referenci (tedy lokální název obsahuje stejnou referenci na objekt, jako „skutečný“ parametr). Předává se tedy (reference na) objekt, ne proměnná jako taková.

    Souhlasím s tím, že většina problémů bude způsobena tím, že se použije stejný měnitelný objekt, kde si programátor myslí, že se mu vytvoří nový objekt.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    rADOn avatar 20.8.2012 16:54 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    1. V pythonu žádné „předávání obsahu“ není. Všechno co vidíš jsou jen jména ve jmenných prostorech která jsou odkazem na nějaký objekt. I primitivní datové typy jako int jsou objekty, každé jméno které vidíš je odkaz na nějakou instanci.
    2. chyba bude asi tady:
      def __init__(self, name, parent, attrs = {})
          self.__attrs = attrs
      slovník attrs se ti zkonstruje pouze jednou v okamžiku definice té funkce, všechny instance si následně přiřadí do svého jmenného prostoru referenci na tentýž slovník. Správně se to dělá takhle:
      def __init__(self, name, parent, attrs = None)
          self.attrs = attrs if attrs is not None else {} 
    3. Pokud si chceš sestavit uzly jako strom objektů v paměti, je to už ve standartní knihovně.
    4. Rada do života jako bonus: Nepiš gettery a settery! Je to nepřehledný hnus a zbytečně to zpomaluje. (Volání metody je v pythonu relativně drahá operace.) Pokud budeš někdy v budoucnu potřebovat udělat getter nebo setter, přístup k atributu se dá zachytit pomocí @property dekorátoru. To ostatně platí obecně – pythoní kód je stručný výstižný, pokud se přistihneš že píšeš nudnou "omáčku" ve stylu Javy tak děláš něco špatně.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    20.8.2012 17:05 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Rada do života jako bonus: Nepiš gettery a settery! Je to nepřehledný hnus a zbytečně to zpomaluje. (Volání metody je v pythonu relativně drahá operace.) Pokud budeš někdy v budoucnu potřebovat udělat getter nebo setter, přístup k atributu se dá zachytit pomocí @property dekorátoru. To ostatně platí obecně – pythoní kód je stručný výstižný, pokud se přistihneš že píšeš nudnou "omáčku" ve stylu Javy tak děláš něco špatně.
    Gettery a settery jsou zločin i v Javě. Je to jasná ukázka, že dotyčný programátor neumí programovat objektově.
    20.8.2012 19:34 kuka
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    a objektove se k hodnotam atributu v jave pristupuje jak?
    20.8.2012 19:44 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    A proč bych měl přistupovat k hodnotám atributů objektu? K čemu je budu potřebovat?

    Je potřeba si uvědomit, že použití getteru nebo setteru je stejně špatné jako public přístup k atributu objektu. Z objektu přece nevybíráme hodnoty atributů ani je nenastavujeme. Objektům se posílají zprávy o událostech a získávají se od nich reporty.
    20.8.2012 20:20 l4m4
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    A proč bych měl přistupovat k hodnotám atributů objektu?
    Protože Python nemá POD (plain old data) schopná snadno a rychle shrnout skupinu informací do jedné ,věci`. Tudíž zbývá
    # Dal jsem to do čtvrté položky, nebo do šesté?  Ale kdeže, do třetí.
    struct = (1.2, -3.0, 'cx', 4, 4, 0, True, False, True)
    print struct[3]
    
    # Složitý přístup k datům máme rádi, nutí nás zamyslet se, zda je opravdu potřebujeme.
    struct = {
       'alpha': 1.2, 'lambda': -3.0,
       'name': 'cx',
       'width': 4, 'height': 4, 'depth': 0,
       'normalize': True, 'recursive': False, 'fixed': True,
    }
    print struct['width']
    
    # Jsem expert, tak vyrobím něco, co se dá indexovat a sčítat jako tuple, abych vás zmátl.
    import collections
    Struct = collections.namedtuple('Struct', bla bla bla...)
    bla bla bla...
    
    # Ecce obiectum!  Není to POD, ale je to skoro tak dobré.
    class Struct:
        def __init__(self, **kwargs):
            self.__dict__.update(kwargs)
    
    struct = Struct(alpha=1.2, beta=-3.0, name='cx', width=4, height=4, depth=0,
                    normalize=True, recusrive=False, fixed=True)
    print struct.width
    
    Navzdory ortodoxním objektistům nechci té věci posílat zprávy, chci s ní něco udělat (viz Execution in the Kingdom of Nouns). Právě proto, aby to nevypadalo jako typická javí byrokracie.
    20.8.2012 20:49 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    A proč bych měl přistupovat k hodnotám atributů objektu?
    ...
    print struct.width
    
    Někdy je také dobré se zamyslet, k čemu vlastně potřebuji struct.width. Často je to zaviněno chybným návrhem objektu. Obvykle totiž samotné atributy objektu ve své podstatě nepotřebuji.
    21.8.2012 08:43 l4m4
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Četl jsi to vůbec? Nenavrhuji žádný objekt. Při čemkoli, co v Pythonu děláš, vznikne spousta objektů, což neznamená, že je navrhuješ.
    21.8.2012 10:49 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Nenavrhuješ objekt, ale vytváříš datovou strukturu. I když je to po technické stránce objekt, má do objektu daleko. Nic nedělá, jen uchovává data.
    21.8.2012 11:37 l4m4
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Výborně. A to je přesně ta situace, kdy vytvářím objekt -- protože nic jiného vytvořit nejde -- jen proto, abych přistupoval k jeho datovým členům. Stejně jako pole vytvářím často proto, abych přistupoval k jeho položkám (někdy se využijí i metody pole).
    21.8.2012 12:27 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Dobrá, máš tedy datovou strukturu. Ale kde máš metody? Plnohodnotné objekty přece obsahují datové struktury a metody, které jediné s nimi mohou pracovat. Gettery a settery mezi metody nepočítám. Jsou jen nadstavbou datové struktury, aby přímý přístup k ní nevypadal tak blbě.
    23.9.2012 22:49 diverman
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Gettery a settery mezi metody nepočítám. Jsou jen nadstavbou datové struktury, aby přímý přístup k ní nevypadal tak blbě.
    Blbost. V setteru bezne provadim vedlejsi efekty, napr. logging. Navic python pomoci property() vytvari tak dokonalou hracku, ze se to primo vybizi takto primo pristupovat k atributum objektu.
    24.9.2012 06:17 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Už jsme si to vyjasnili jinde. Byly myšleny primitivní gettery a settery v uvedeném příkladu, které jen nahrazovaly přímý přístup k datové struktuře a nedělaly nic navíc.
    pavlix avatar 25.9.2012 12:18 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Byly myšleny primitivní gettery a settery v uvedeném příkladu, které jen nahrazovaly přímý přístup k datové struktuře a nedělaly nic navíc.

    Což je ovšem velmi nezajímavé téma, o kterém si tu podle mě chce povídat jen jeden jediný člověk.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    pavlix avatar 21.8.2012 12:23 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    I když je to po technické stránce objekt, má do objektu daleko.
    Ach ta terminologie :).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    21.8.2012 09:05 kuka
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Aha a kdyz budeme chtit z objektu reprezentujiciho treba zamestnance ziskat jeho prijmeni, tak to udelame jak?
    21.8.2012 09:40 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Především se zamyslím nad tím, k čemu mi bude jenom jeho příjmení a co s ním vlastně chci dělat. Objekt není jen datové skladiště, do kterého ukládám elementární údaje a zase je vybírám. Objekty toho umí mnohem víc.

    Pokud budu z objektu potřebovat jen příjmení zaměstnance, tak zbývající údaje o zaměstnanci jsou zbytečné. Nepotřebuji tedy objekt, ale bude mi stačit jedna proměnná typu string, do které umístím příjmení.
    21.8.2012 10:54 George O.
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Gettery a Settery jsou docela dobra vec, pokud clovek chce udrzet nejakou konzistenci a access policy. Soucasny priklad byl maximalne zjednoduseny, abych vyloucil zbytecne logicke chyby. Kazdopadne uz jsem si nastudoval dekoratory a docela fajnova vec to je:-)

    Ale kazdopadne nic to nemeni na tom, ze se mi nedari zrealizovat klasicky seznam-like datovou strukturu - priklad:
    typedef struct list {
      char *data;
      struct list *next;
    } LIST;
    
    Ja se teda snazim presneji o tohle, coz sice neni to same, ale napadne podobne:
    typedef struct list {
      char *data;
      struct list *parent;
      struct list **children;
    } LIST;
    
    Ale neprisel jsem na to, jak to zrealizovat v pythonu. V PHP to bylo hned, ale v pythonu porad tapu a tapu...
    21.8.2012 11:10 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Proč na seznam nepoužiješ strukturu seznam?
    21.8.2012 12:18 George O.
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Protoze seznam nema reference mezi objekty nebo snad ano? :-) A jinak pokud sis vsiml, tohle byla tree struktura, ale mela podobne vlastnosti, jako seznam - to jest reference na sebe sama:-)
    rADOn avatar 21.8.2012 12:44 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Protoze seznam nema reference mezi objekty nebo snad ano?
    Který části tvrzení „v pythonu je všechno reference“ nerozumíš? :-) Sleduj lva:
    In [10]: l = [1,2,3]
    
    In [11]: l.append(l)
    
    In [12]: l
    Out[12]: [1, 2, 3, [...]]
    
    (tři tečky jsou objekt Elipsis který značí zacyklení)
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    pavlix avatar 21.8.2012 12:28 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Ale kazdopadne nic to nemeni na tom, ze se mi nedari zrealizovat klasicky seznam-like datovou strukturu - priklad:
    typedef struct list {
      char *data;
      struct list *next;
    } LIST;
    
    Definuj „nedaří se mi“, mně totiž nenapadá, co by se ti na tom mohlo nedařit. Atribut data nastavit můžeš, atribut next jakbysmet, takže?
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    21.8.2012 12:54 George O.
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Odpoved najdes v "test2.py" (2. reakce, v teto diskuzi) :-)
    rADOn avatar 21.8.2012 15:47 rADOn | skóre: 44 | blog: bloK | Praha
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Tam máš ale úplně jinou chybu.
    "2^24 comments ought to be enough for anyone" -- CmdrTaco
    pavlix avatar 21.8.2012 21:28 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Odpoved najdes v "test2.py" (2. reakce, v teto diskuzi) :-)
    Pokud nemáš zájem o pomoc, stačí to říct rovnou :).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    21.8.2012 11:20 kuka
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Takze pokud na konkretnim miste systemu potrebuju zrovna jen prijmeni, tak vsechno ostatni je zbytecne? Na jinem miste muze byt potreba neco jineho. Spravny objektovy pristup by tedy spocival v tom, ze prijmeni zamestnance budu mit nekde uplne jinde nez v instanci tridy zamestnanec (kde?) v promenne typu string?
    21.8.2012 11:29 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Je mi podivné, proč bych měl chtít z instance třídy zaměstnanec jen příjmení zaměstnance. Jiné údaje mě nezajímají? Ani osobní číslo? Vůbec nic s tím příjmením nepotřebuji dělat, jenom ho chci vytáhnout z objektu? K čemu mi pak bude, když ho na nic nepotřebuji?
    21.8.2012 11:38 l4m4
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Chci ho vypsat na stdout. Tak.
    21.8.2012 11:41 l4m4
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Nebo naopak: K čemu potom ten objekt drží to příjmení, když ho od něj nesmím chtít?
    21.8.2012 11:53 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Třeba můžu po tom objektu chtít, aby to příjmení vypsal na stdout. Nebo po něm můžu chtít, aby na ten stdout vypsal celé jméno, příjmení, adresu a aby to správně naformátoval. Také po něm můžu chtít, aby mi to poslal jako string nebo strukturu.

    Nelíbí se mi, když kdekdo do třídy paušálně nacpe gettery a settery na každou položku, ke které možná bude chtít přistupovat z vnějšku. Je to stejně špatné, jako použití public proměnných. Jen to vypadá jinak.
    pavlix avatar 21.8.2012 12:29 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Nelíbí se mi, když kdekdo do třídy paušálně nacpe gettery a settery na každou položku, ke které možná bude chtít přistupovat z vnějšku. Je to stejně špatné, jako použití public proměnných. Jen to vypadá jinak.
    Nebo taky stejně správně :).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    21.8.2012 12:40 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Kdybych napsal "stejně správně", tak by to možná vypadalo, jako kdybych obhajoval public proměnné. A k tomu mám hodně daleko. Objekt má být černá skříňka, která v maximální míře skrývá svou strukturu, reaguje na události a poskytuje reporty.
    pavlix avatar 21.8.2012 21:29 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Kdysi jsem byl taky víc filosof než programátor, ale v poslední době jsem tyhle složky osobnosti spíše vyrovnal :).
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    21.8.2012 12:39 kuka
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Ovsem o zadnem pausalnim cpani getteru (a uz vubec ne setteru) do tridy nebylo vubec reci, to je pouze jakasi tvoje sugesce. Jak se lisi metoda napr. getPrijmeni od "aby mi to poslal jako string"? Mne se zase nelibi, kdyz nekdo pausalne predpoklada, ze ostatni jsou blbci, a placa hovadiny jako "pouziti getteru je stejne spatne jako public pristup k atributu".
    21.8.2012 13:15 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Pod pojmem getter chápu metodu, ve které je pouze
    return this.prijmeni;
    a takové metody se mi nelíbí, protože nic nedělají. Možná to chápeš jinak.

    Velmi často se setkávám s tím, že v aplikaci je getter osoba.getPrijmeni(), o řádek níž osoba.getJmeno() a na dalším je jejich spojování a výstup. Proč tak složitě, když to může udělat objekt?

    Se settery to bývá stejné. Nejprve vytvoření prázdného objektu, potom hromada setterů. Přitom by stačilo jedním příkazem vytvořit naplněný objekt v konstruktoru.

    Další příklad. Připočtení hodnoty k atributu objektu. Běžně vídám tuto hrůzu:
    objekt.setX(objekt.getX+5);
    místo praktičtějšího
    objekt.addX(5);
    nebo
    objekt.posunDoprava(5);
    případně
    objekt.posun(5,kurs);
    21.8.2012 13:42 kuka
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Co bezne vidas je irelevantni a getter chapes zjednodusene (i tak ale byva konkretne v jave lepsi takovy trivialni getter nez primy pristup k promenne). Gettery a settery umoznuji pristup k properties (tzn. pochopitelne nijak nesupluji metody ala "posunDoprava"). Property muze byt cokoliv a technicky nemusi byt ve tride nijak reprezentovana. Napriklad zamestnanec muze mit property "cele jmeno", ovsem datove obsahuje zvlast jmeno a prijmeni, ktere se pro potreby ziskani celeho jmena spoji a volajicimu do toho vubec nic neni. Setter pro takovou property pak neobsahuje vubec a nemusi ho obsahovat ani pro prijmeni (to je ostatne caste, nemodifikovatelne tridy neposkytuji settery ani jine mutatory). To je prave rozdil proti primemu pristupu k instance variables - getter nebo setter muze obsahovat logiku, kontrolu pristupu, logovani... Muze byt take jednoduse obalen aspektem, coz uz je ale offtopic. Pouziti getteru je zkratka velmi objektove, protoze zakryva implementaci.
    21.8.2012 13:55 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Dobrá. Asi jsem měl spíš použít slovní spojení "primitivní getter" a "primitivní setter", která snad lépe vystihují, co jsem měl na mysli.

    Souhlasím, že objekt vůbec nemusí dané atributy obsahovat ve formě proměnných. Settery a gettery mohou například přímo komunikovat s databází.

    Ovšem nevidím důvod, proč by podle tebe nemohl existovat setter setCeleJmeno("Jmeno","Prijmeni")
    21.8.2012 15:07 kuka
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Tak ja netvrdim, ze nemuze nikdy existovat. Metodicky to ale neni ciste, protoze jestlize je property odvozena, tak se jeji hodnota jako takova nenastavuje. Pritom muze byt klidne v poradku poskytnout metodu, ktera nastavuje jmeno i prijmeni, pouze jeji "vydavani" za setter jakesi jine property je matouci, metoda by se mohla jmenovat treba changeJmenoPrijmeni. Je to spis otazka nejakych best practices pri modelovani, kde by rekneme pro trivialniho zamestnance mohly byt read-write properties jmeno a prijmeni a read-only property celeJmeno, u niz by byl popsan konkretni format (treba prijmeni uppercase, zarovnani a pripadne zkraceni krestniho jmena apod.).
    21.8.2012 18:10 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Vzhledem k tomu, že většinou konstruktorem rovnou ukládám položku do databáze, tak už musím mít k dispozici všechny potřebné atributy, abych chybějící položky nemusel v databázi nahrazovat správným údajem. Takže pak už to ani nenazývám jako setter, ale jako konstruktor. Setterem tu položku jen modifikuji nebo mažu, ale nepřidávám.
    21.8.2012 11:44 kuka
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Tak proc ne, at me tedy zajima prijmeni, jmeno, osobni cislo a cislo bot - na situaci to meni co?
    Pavel Stárek avatar 21.8.2012 11:27 Pavel Stárek | skóre: 43 | blog: Tady bloguju já :-) | Kolín
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Asi tomu nerozumím. Tedy je špatně když si napíšu takovouhle třídu se kterou budu někde dále v programu pracovat?
    
    class Zamestnanec(object):
      def __init__(self):
        self.jmeno = u""
        self.prijmeni = u""
        self.pozice = u""
    
    Kdo chce, hledá způsob; kdo nechce, hledá důvod.
    21.8.2012 11:39 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Připadá mi podivné vytvářet objekt třídy Zamestnanec, který nemá jméno, příjmení ani pozici. Dokonce místo nedefinovaných hodnot má nějaké prázdné řetězce. To už byl mnohem lepší konstruktor, který sem poslal l4m4.
    Pavel Stárek avatar 21.8.2012 11:52 Pavel Stárek | skóre: 43 | blog: Tady bloguju já :-) | Kolín
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    No vidím, že pán je programátor. Takže tady bude každá další diskuze zbytečná.
    Kdo chce, hledá způsob; kdo nechce, hledá důvod.
    21.8.2012 12:21 George O.
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    No, treba ma jen jiny pohled na problem. Mozna mu prijde efektivnejsi hash array s externim workflow a zadnym rizenim pristupu :-D
    21.8.2012 12:34 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Právě naopak. Gettery a settery považuji za nežádoucí externí workflow, protože nic nedělají. Pouze zpřístupňují interní proměnné objektu.
    pavlix avatar 21.8.2012 12:36 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Já měl vždy za to, že vznikly pro případ, že něco dělají.
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    pavlix avatar 21.8.2012 12:31 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Tak s tím nesmyslným prázdným zaměstnancem by se dalo celkem souhlasit, ne?
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    Pavel Stárek avatar 21.8.2012 12:40 Pavel Stárek | skóre: 43 | blog: Tady bloguju já :-) | Kolín
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    A co když si tam ta data chci dát někdy jindy?
    Kdo chce, hledá způsob; kdo nechce, hledá důvod.
    pavlix avatar 23.9.2012 04:00 pavlix | skóre: 54 | blog: pavlix
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Je nějaký důvod, proč na to někdy jindy neodložit vytvoření toho záznamu?
    Já už tu vlastně ani nejsem. Abclinuxu umřelo.
    23.9.2012 07:25 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Podle mne není. Obvykle je zbytečné vytvářet prázdné objekty a teprve dodatečně je plnit. V reálném životě to nikdo nedělá. Proč to zavádět v programování? Konstruktory jsou tu od toho, abychom je používali.
    Pavel Stárek avatar 21.8.2012 12:53 Pavel Stárek | skóre: 43 | blog: Tady bloguju já :-) | Kolín
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    A jen tak pro zajímavost, to není objekt, alébrž třída.
    Kdo chce, hledá způsob; kdo nechce, hledá důvod.
    21.8.2012 16:44 Milan Roubal | skóre: 25
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    podle me je ten vysledek 2 soucet title + script a nikoliv head + body. Rekl bych, ze to dela ten radek odstraneni prvniho elementu.

    U toho druheho prikladu jsou vsechny objekty HtmlElement jeden a ten samy objekt, proto to neudela strom.
    Bystroushaak avatar 23.9.2012 00:10 Bystroushaak | skóre: 32 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Jen doplním, že kdyby někdo nechtěl zabíjet čas psaním vlastního parseru, existuje BeautifulSoup, nebo můj pyDHTMLParser.
    23.9.2012 19:39 George O.
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Anebo taky existuje http://docs.python.org/library/htmlparser.html coz je zakladni knihovna pythonu... a je spolehlivy :-)
    Bystroushaak avatar 24.9.2012 14:59 Bystroushaak | skóre: 32 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Jenže má jednu nevýhodu - autoři při jeho návrhu fetovali.

    Pro různé spidery a celkově stránky, u kterých dopředu nemůžeš, nebo jsi moc líný namodelovat strukturu se víc hodí ty mnou odkazované.
    26.9.2012 12:40 Kit
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Zajímalo by mě, co konkrétně je na modulu HTMLParser špatně. Podle mne je to běžné parsování metodou SAX. Každý token vyvolá nějakou událost, kterou si zpracuješ podle potřeby.
    Bystroushaak avatar 26.9.2012 13:57 Bystroushaak | skóre: 32 | blog: Bystroushaakův blog | Praha
    Rozbalit Rozbalit vše Re: Python - prace s pameti
    Podle mne je to běžné parsování metodou SAX. Každý token vyvolá nějakou událost, kterou si zpracuješ podle potřeby.
    To je na něm špatně.

    Založit nové vláknoNahoru

    Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

    ISSN 1214-1267   www.czech-server.cz
    © 1999-2015 Nitemedia s. r. o. Všechna práva vyhrazena.