abclinuxu.cz AbcLinuxu.cz itbiz.cz ITBiz.cz HDmag.cz HDmag.cz abcprace.cz AbcPráce.cz
Inzerujte na AbcPráce.cz od 950 Kč
Rozšířené hledání
×
    dnes 16:11 | Nová verze

    Bylo oznámeno (cs) vydání Fedora Linuxu 40. Přehled novinek ve Fedora Workstation 40 a Fedora KDE 40 na stránkách Fedora Magazinu. Současně byl oznámen notebook Slimbook Fedora 2.

    Ladislav Hagara | Komentářů: 0
    dnes 13:44 | Upozornění

    ČTK (Česká tisková kancelář) upozorňuje (X), že na jejím zpravodajském webu České noviny byly dnes dopoledne neznámým útočníkem umístěny dva smyšlené texty, které nepocházejí z její produkce. Jde o text s titulkem „BIS zabránila pokusu o atentát na nově zvoleného slovenského prezidenta Petra Pelligriniho“ a o údajné mimořádné prohlášení ministra Lipavského k témuž. Tyto dezinformace byly útočníky zveřejněny i s příslušnými notifikacemi v mobilní aplikaci Českých novin. ČTK ve svém zpravodajském servisu žádnou informaci v tomto znění nevydala.

    Ladislav Hagara | Komentářů: 8
    dnes 13:33 | Komunita

    Byla založena nadace Open Home Foundation zastřešující více než 240 projektů, standardů, ovladačů a knihoven (Home Assistant, ESPHome, Zigpy, Piper, Improv Wi-Fi, Wyoming, …) pro otevřenou chytrou domácnost s důrazem na soukromí, možnost výběru a udržitelnost.

    Ladislav Hagara | Komentářů: 0
    dnes 13:00 | Nová verze

    Společnost Meta otevírá svůj operační systém Meta Horizon OS pro headsety pro virtuální a rozšířenou realitu. Vedle Meta Quest se bude používat i v připravovaných headsetech od Asusu a Lenova.

    Ladislav Hagara | Komentářů: 0
    dnes 04:33 | IT novinky

    Společnost Espressif (ESP8266, ESP32, …) získala většinový podíl ve společnosti M5Stack, čímž posiluje ekosystém AIoT.

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

    Byla vydána nová stabilní verze 3.5 svobodného multiplatformního softwaru pro editování a nahrávání zvukových souborů Audacity (Wikipedie). Přehled novinek také na YouTube. Nově lze využívat cloud (audio.com). Ke stažení je oficiální AppImage. Zatím starší verze Audacity lze instalovat také z Flathubu a Snapcraftu.

    Ladislav Hagara | Komentářů: 0
    včera 16:44 | Zajímavý článek

    50 let operačního systému CP/M, článek na webu Computer History Museum věnovaný operačnímu systému CP/M. Gary Kildall z Digital Research jej vytvořil v roce 1974.

    Ladislav Hagara | Komentářů: 2
    včera 16:22 | Pozvánky

    Byl zveřejněn program a spuštěna registrace na letošní konferenci Prague PostgreSQL Developer Day, která se koná 4. a 5. června. Na programu jsou 4 workshopy a 8 přednášek na různá témata o PostgreSQL, od konfigurace a zálohování po využití pro AI a vector search. Stejně jako v předchozích letech se konference koná v prostorách FIT ČVUT v Praze.

    TomasVondra | Komentářů: 0
    včera 03:00 | IT novinky

    Po 48 letech Zilog končí s výrobou 8bitového mikroprocesoru Zilog Z80 (Z84C00 Z80). Mikroprocesor byl uveden na trh v červenci 1976. Poslední objednávky jsou přijímány do 14. června [pdf].

    Ladislav Hagara | Komentářů: 6
    včera 02:00 | IT novinky

    Ještě letos vyjde Kingdom Come: Deliverance II (YouTube), pokračování počítačové hry Kingdom Come: Deliverance (Wikipedie, ProtonDB Gold).

    Ladislav Hagara | Komentářů: 12
    KDE Plasma 6
     (71%)
     (10%)
     (2%)
     (17%)
    Celkem 689 hlasů
     Komentářů: 4, poslední 6.4. 15:51
    Rozcestník

    Dotaz: Python - prace s pameti

    20.8.2012 13:35 George O.
    Python - prace s pameti
    Přečteno: 843×
    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: 44 | 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: 44 | 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: 44 | 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: 44 | 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: 36 | 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: 36 | 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: 36 | 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.