Re: [python] html do pdf
Ahoj, ja toto riesim cez linuxovu utilitu htmldoc . azur -Pôvodná správa- Od: Ondrej Beranek [rain...@gmail.com] Komu: Konference PyCZ Predmet: [python] html do pdf ahoj, zpracovavam pythonem 2.5 nejaka data ktera dostavam bohuzel v html. Potreboval bych to prevest do nebo do nejakeho obrazku je toho celkem dost na pocet. Vysledek nemusi byt presny jako v prohlizeci, (stranka je take velice jednoducha bez odkazu a stylu). Koukal jsem se po python scriptech ale nejak na nic nemohu narazit. Zkousel jsem se divat i po non-python scriptech a take nemohu na nic narazit. Resil jste uz nekdo neco takoveho ? O. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] html do pdf
Ahoj, Na PDF je magicky ReportLab, a jeho nadstavba umi prevadet (jednoduche) HTML primo do PDF. Tusim, ze se jmenuje "pisa", ale nejsem ted u PC abych se podival. Snad ti to pomuze. Jirka On 20/04/2010, Ondrej Beranek wrote: > ahoj, > > zpracovavam pythonem 2.5 nejaka data ktera dostavam bohuzel v html. > Potreboval bych to prevest do nebo do nejakeho obrazku je toho celkem dost > na pocet. Vysledek nemusi byt presny jako v prohlizeci, (stranka je take > velice jednoducha bez odkazu a stylu). Koukal jsem se po python scriptech > ale nejak na nic nemohu narazit. Zkousel jsem se divat i po non-python > scriptech a take nemohu na nic narazit. Resil jste uz nekdo neco takoveho ? > > O. > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] html do pdf
> zpracovavam pythonem 2.5 nejaka data ktera dostavam bohuzel v html. > Potreboval bych to prevest do nebo do nejakeho obrazku je toho celkem dost > na pocet. Vysledek nemusi byt presny jako v prohlizeci, (stranka je take > velice jednoducha bez odkazu a stylu). Koukal jsem se po python scriptech > ale nejak na nic nemohu narazit. Zkousel jsem se divat i po non-python > scriptech a take nemohu na nic narazit. Resil jste uz nekdo neco takoveho ? Nešlo by to přes wxPython? Ne, že bych to někdy dělal, ale podle dokumentace to vypadá, že wx.HTML má nějaký support pro tisk, tak bych to poslal na pdf tiskárnu. Nástroje na spojování pdf jsou. Případně by to šlo vyrenderovat přes wxHtmlDCRenderer a vytáhnout z toho obrázek. Nebo jestli je to html opravdu jednoduché a uniformní, tak použít reportlab. -- Petr _ http://petrsstuff.blogspot.com/ ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] html do pdf
ahoj, zpracovavam pythonem 2.5 nejaka data ktera dostavam bohuzel v html. Potreboval bych to prevest do nebo do nejakeho obrazku je toho celkem dost na pocet. Vysledek nemusi byt presny jako v prohlizeci, (stranka je take velice jednoducha bez odkazu a stylu). Koukal jsem se po python scriptech ale nejak na nic nemohu narazit. Zkousel jsem se divat i po non-python scriptech a take nemohu na nic narazit. Resil jste uz nekdo neco takoveho ? O. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Zkrácená forma přiřazení selž e
Jinými slovy, počet proměnných kt. používám je nutné explicitně udat. To PM Díky, to využití řezu je asi nejšikovnější forma použití -petroff- ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Zkrácená forma přiřazení selž e
Ještě mě napadlo, že by se na to dalo jít takto: class Seznam: def __init__(self, sez): self.data = sez def __getitem__(self, idx): if isinstance(idx, slice): return self._slice(idx.start, idx.stop, idx.step) return self.data[idx] if idx < len(self.data) else None def _slice(self, start, stop, step): if step is None: step = 1 for i in range(start, stop, step): yield self[i] slova = Seznam(("item1", "item2")) a, b, c, d = slova[:4] assert (a, b, c, d) == ("item1", "item2", None, None) # projde to PM 2010/4/20 Petr Messner : > Problem ale stejne bude v tom, ze kdyz chci > > prvy, druhy, treti, ctrty = slova > > tak ten iterator musi vratit presne 4 hodnoty a pak vyvolat > StopIteration. A jak tomu reknes, ze z toho tahas ty 4 hodnoty? Leda > tak tim, ze tam fakt budou presne 4. To ale neni chovani, ktere > ocekava tazatel. > > viz http://docs.python.org/reference/simple_stmts.html#assignment-statements > - "If the target list is a comma-separated list of targets: The object > must be an iterable with the same number of items as there are targets > in the target list," > > PM > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Zkrácená forma přiřazení sel že
No jo. Je to zjednodušení. Petr Messner > Přikryl Petr >> def __iter__(self): >> '''Vraci iterator -- sam sobe iteratorem.''' >> self.idx = 0 >> return self > >prosim takto ne, kdyz udelam >it = iter(slova) >it2 = iter(slova) >tak ty iteratory se navzajem ovlivnuji. Záleží na tom, k čemu to má sloužit. Dá se to napsat s odděleným objektem iterátoru: class Seznam: def __init__(self,sez): self.data=sez def __getitem__(self,idx): return idx < len(self.data) and self.data[idx] or None def __iter__(self): return SeznamIterator(self) class SeznamIterator: def __init__(self, obj): self.idx = 0 self.obj = obj def next(self): '''Standardni podpora iterace.''' if self.idx >= len(self.obj.data): StopIteration hodnota = Seznam.__getitem__(self.obj, self.idx) self.idx += 1 return hodnota ### VSTUP: ### slova = Seznam(["ITEM-1","ITEM-2","ITEM-3", 4]) prvni = slova[0] druhy = slova[1] treti = slova[2] ctrty = slova[3] # Rucne provadena iterace. it1 = iter(slova) it2 = iter(slova) print id(it1) print id(it2) print next(it1) print next(it2) print next(it1) print next(it2) print next(it1) print next(it2) print next(it1) print next(it2) print '-' * 50 >Problem ale stejne bude v tom, ze kdyz chci >prvy, druhy, treti, ctrty = slova > >tak ten iterator musi vratit presne 4 hodnoty a pak vyvolat >StopIteration. A jak tomu reknes, ze z toho tahas ty 4 hodnoty? Leda >tak tim, ze tam fakt budou presne 4. To ale neni chovani, ktere >ocekava tazatel. Tady je otázka, jestli je očekávání podporováno realitou. Nevím, jestli to vůbec nějak jde. Nedivil bych se, kdyby to nešlo. Takhle se bude chovat i standardní seznam. Pokud to má podporovat iteraci, pak nemá smysl ani to None v __getitem__() ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Zkrácená forma přiřazení selž e
2010/4/20 Přikryl Petr : > def __iter__(self): > '''Vraci iterator -- sam sobe iteratorem.''' > self.idx = 0 > return self prosim takto ne, kdyz udelam it = iter(slova) it2 = iter(slova) tak ty iteratory se navzajem ovlivnuji. Problem ale stejne bude v tom, ze kdyz chci prvy, druhy, treti, ctrty = slova tak ten iterator musi vratit presne 4 hodnoty a pak vyvolat StopIteration. A jak tomu reknes, ze z toho tahas ty 4 hodnoty? Leda tak tim, ze tam fakt budou presne 4. To ale neni chovani, ktere ocekava tazatel. viz http://docs.python.org/reference/simple_stmts.html#assignment-statements - "If the target list is a comma-separated list of targets: The object must be an iterable with the same number of items as there are targets in the target list," PM ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Zkrácená forma přiřazení sel že
Jirka Vejrazka > nemam ted momentalne cas to zkouset, ale troufnul bych si odhadnout, >ze pro funkcnost ve stylu (b) budes muset nadefinovat jak se ma chovat >iterator, tj. napsat si vlastni metodu __iter__(self, ...) Je to tak. Jirka to trefil přesně. To násobné přiřazení vyžaduje, aby objekt podporoval průchod svými prvky. (Takový objekt se pak dá použít například i v cyklu for.) Zkus tohle: class Seznam(): def __init__(self,sez): self.data=sez def __getitem__(self,idx): return idx < len(self.data) and self.data[idx] or None def __iter__(self): '''Vraci iterator -- sam sobe iteratorem.''' self.idx = 0 return self def next(self): '''Standardni podpora iterace.''' if self.idx >= len(self.data): raise StopIteration hodnota = Seznam.__getitem__(self, self.idx) self.idx += 1 return hodnota ### VSTUP: ### slova = Seznam(["ITEM-1","ITEM-2","ITEM-3","ITEM-4"]) prvni = slova[0] druhy = slova[1] treti = slova[2] ctrty = slova[3] # Rucne provadena iterace. it = iter(slova) print it print next(it) print next(it) print next(it) print '-' * 50 # Automaticky aktivovana iterace. prvy, druhy, treti, ctvrty = slova print prvy print druhy print treti print ctvrty___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] ZámÄna funkce v instanci objektu
JeÅ¡tÄ jsem na to koukal a zjistil jsem zajimavou vÄc. MethodType a UnboundMethodType jsou tentýž objekt, Äili vázané a odvázané metody jsou na oko stejného typu. Typ zkonstruované metody závisà na argumentech: MethodType(funkce, instance) # vrátà vázanou metodu MethodType(funkce, None, tÅÃda) # vrátà odvázanou metodu Když se použije jak instance, tak tÅÃda, výsledek je vázaná metoda. Hynek Fabian (úterý 20 Duben 2010 11:10:20): > 302302 (úterý 20 Duben 2010 09:56:14): > > Ano, mÄlo by to být dynamické. A vaÅ¡e ÅeÅ¡enà se mi lÃbÃ. Jenom nechápu > > proÄ to nelze udÄlat tÃm prostým pÅiÅazenÃm? Co se tedy vlastnÄ stane, > > když do metody nÄjakého objektu pÅiÅadÃm novou funkci? > > "do metody" nic nepÅiÅadÃÅ¡, jen nahradÃÅ¡ jeden objekt ve jmenném prostoru > instance jiným - v daném pÅÃpadÄ obyÄejnou funkcÃ. Jeden způsob je vázat ji > ruÄnÄ: > > class C: pass > c = C() > def a(self): pass > c.(a) > > Pokud chceÅ¡ jen pÅedávat nÄkam jednu metodu, může být jednoduÅ¡Å¡Ã ji svázat > ruÄne: > > b = lambda: a(c) > > Je to jen kosmetická úprava proti ruÄnÃmu svázánà a je to funkÄnÄ zcela > shodné s opravdovou metodou objektu. > Pokud chceÅ¡ opravdovou vázanou metodu, můžeÅ¡ si ji vyrobit: > > import types > b = types.MethodType(a, c, C) > c.b = b > > b() bude nadále dostávat jako prvnà argument instanci c > Mezi volánÃm b() a c.b() nenà žádný rozdÃl, totéž platà pro konstrukci s > lambdou. Ta je sice jiného typu (LambdaType vs. MethodType) ale dÄlá totéž, > metody se v pythonu od funkcà niÄÃm jiným neliÅ¡Ã. > > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Zkrácená forma přiřazení selž e
Ahoj i tobe... nemam ted momentalne cas to zkouset, ale troufnul bych si odhadnout, ze pro funkcnost ve stylu (b) budes muset nadefinovat jak se ma chovat iterator, tj. napsat si vlastni metodu __iter__(self, ...) Jirka ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
[python] Zkrácená forma přiřazení selž e
Proměnné se iniciují se seznamu, který nemusí být kompletní (chybějící prvky se načtou jako None) class Seznam(): def __init__(self,sez): self.data=sez def __getitem__(self,idx): return idx < len(self.data) and self.data[idx] or None ### VSTUP: ### slova = Seznam(["ITEM-1","ITEM-2"]) #---(a) FUNGUJE SPRÁVNĚ (3.+4. mají hodnotu None) ---# prvni = slova[0] druhy = slova[1] treti = slova[2] ctrty = slova[3] #--- (b) SELŽE (error = ValueError) ---# prvy, druhy, treti, ctrty = slova Dalo by se to v třídě Seznam nějak ošetřit ? (počet proměnných není konstantní, 4 je příklad) -petroff- ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Z�m�na funkce v instanci objektu
Este ma napadlo jedno riesenie. Ale rovnako blbe ako vsetky ostatne :) Len je ciste, bez metaprogramovania. class tridaA(): @staticmethod def _b(self, x): self.x=x def b(self, x): return self._b(self, x) a potom: a = tridaA() a._b = c a bude fungovat. Jan Janech 302302 wrote: Mám nadefinovanou tÅÃdu class tridaA(): def b(self,x): self.x=x vytvoÅÃm jejà instanci a=tridaA() mÃsto metody b, ale chci, aby se vždy v tomto objektu zavolala funkce c, která je nadefinována nÄkde mimo: def c(self, x): self.x = x+1 Pokud to ale pouze pÅiÅadÃm a zavolám a.b=c a.b(1) tak se do parametru self automaticky nepÅiÅazuje daný objekt a. Jak můžu zamÄnit funkce ve vytvoÅené instanci objektu, aby se to chovalo jako bÄžná metoda? Czenek ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python -- Ing. Jan Janech Katedra softverovych technologii Fakulta riadenia a informatiky Zilinska Univerzita ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] ZámÄna funkce v instanci objektu
302302 (úterý 20 Duben 2010 09:56:14): > Ano, mÄlo by to být dynamické. A vaÅ¡e ÅeÅ¡enà se mi lÃbÃ. Jenom nechápu proÄ > to nelze udÄlat tÃm prostým pÅiÅazenÃm? Co se tedy vlastnÄ stane, když do > metody nÄjakého objektu pÅiÅadÃm novou funkci? "do metody" nic nepÅiÅadÃÅ¡, jen nahradÃÅ¡ jeden objekt ve jmenném prostoru instance jiným - v daném pÅÃpadÄ obyÄejnou funkcÃ. Jeden způsob je vázat ji ruÄnÄ: class C: pass c = C() def a(self): pass c.(a) Pokud chceÅ¡ jen pÅedávat nÄkam jednu metodu, může být jednoduÅ¡Å¡Ã ji svázat ruÄne: b = lambda: a(c) Je to jen kosmetická úprava proti ruÄnÃmu svázánà a je to funkÄnÄ zcela shodné s opravdovou metodou objektu. Pokud chceÅ¡ opravdovou vázanou metodu, můžeÅ¡ si ji vyrobit: import types b = types.MethodType(a, c, C) c.b = b b() bude nadále dostávat jako prvnà argument instanci c Mezi volánÃm b() a c.b() nenà žádný rozdÃl, totéž platà pro konstrukci s lambdou. Ta je sice jiného typu (LambdaType vs. MethodType) ale dÄlá totéž, metody se v pythonu od funkcà niÄÃm jiným neliÅ¡Ã. ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] ZámÄna funkce v instanci objektu
Existuje jiný způsob, než zmÄna typu za bÄhu: class A: def b(self, x): self.x = x def c(self): return self.x a = A() a.b(42) assert a.x == 42 class Proxy: def __init__(self, obj): self.__dict__["_obj"] = obj def __getattr__(self, name): return getattr(self._obj, name) def __setattr__(self, name, value): return setattr(self._obj, name, value) class A2 (Proxy): def b(self, x): self.x = x+1 a = A2(a) a.b(42) assert a.x == 43 assert a.x == a.c() # dukaz, ze se to priradi skutecne objektu tridy A SchválnÄ, co to je - já myslÃm, že je to návrhový vzor dekorátor :) Nevýhoda je v tom, že když se takto vytvoÅà delÅ¡Ã ÅetÄz objektů, stoupá režie. Nebo pokud opravdu chcete mÃt takto dynamický objekt, možná by bylo lepÅ¡Ã nepoužÃvat pÅÃmo Python objekt, ale naimplementovat si ho vlastnÃmi silami pomocà slovnÃku a obalu, který pÅi zavolánà metody vezme funkci ze slovnÃku (klÃÄem je název) a zavolá ji se sebou samým jako prvnà parametr té funkce. PM 2010/4/20 302302 <302...@centrum.cz>: > > Mám nadefinovanou tÅÃdu > > class tridaA(): >     def b(self,x): >        self.x=x > > vytvoÅÃm jejà instanci > > a=tridaA() > > mÃsto metody b, ale chci, aby se vždy v tomto objektu zavolala funkce c, > která je nadefinována nÄkde mimo: > > def c(self, x): >     self.x = x+1 > > Pokud to ale pouze pÅiÅadÃm a zavolám > > a.b=c > a.b(1) > > tak se do parametru self automaticky nepÅiÅazuje daný objekt a. > > Jak můžu zamÄnit funkce ve vytvoÅené instanci objektu, aby se to chovalo jako > bÄžná metoda? > > Czenek > ___ > Python mailing list > Python@py.cz > http://www.py.cz/mailman/listinfo/python > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Z�m�na funkce v instanci objektu
Treba si uvedomit jednu vec In [1]: class tridaA(object): ...: def b(self, x): ...: self.x = x ...: ...: In [2]: def c(self, x): ...: self.x = x+1 ...: ...: In [3]: a=tridaA() In [4]: a.b Out[4]: > In [5]: a.b = c In [6]: a.b Out[6]: Ako vidite, povodne bola a.b "bound method", ktora vie svoje self, a po novom je a.b "function", teda ziadna metoda a self parameter nema aj ak ho uvediete v zozname. Je to kvoli tomu, ze pri priradeni funkcie ako atributu sa automaticky vytvori objekt typu method. Atributom triedy teda nie je samotna funkcia ale objekt, ktory funkciu zapuzdruje. Parameter self sa posiela iba metodam. Neviem o ziadnom jednoduchom sposobe, ako vytvorit plnohodnotnu metodu na instancii. Samozrejme v pythone nie je nic nemozne, ale asi by to stratilo nieco na prehladnosti a kus na rychlosti. Takze takym veciam sa radsej vyhybam. Jan Janech 302302 wrote: Ano, mÄlo by to být dynamické. A vaÅ¡e ÅeÅ¡enà se mi lÃbÃ. Jenom nechápu proÄ to nelze udÄlat tÃm prostým pÅiÅazenÃm? Co se tedy vlastnÄ stane, když do metody nÄjakého objektu pÅiÅadÃm novou funkci? Czenek Jan Janech wrote: Este by som ale rad upozornil, ze pred pouzitim takehoto riesenia si treba najskor dva krat poriadne premysliet, ci ho naozaj chcem pouzit. Vo vela pripadoch je to legitimne riesenie, ale casto to znamena, ze nieco nie je v navrhu v poriadku. Jan Janech Popripade, ak to treba spravit dynamicky, tak a=tridaA() a.__class__ = tridaA2 ak tridaA2 pre nieco neexistuje, da sa spravit: # c je funkcia, ktora sa ma pouzit ako metoda a.b a.__class__ = type('tridaA', (tridaA, ), {'b': c}) v tom pripade ale musi byt tridaA definovana ako new-style class, teda musi dedit po object. Jan Janech azurIt wrote: V pripade, ze ta nova funkcia bude vzdy rovnaka, tak sa toto riesi proste dedenim: class tridaA: def b(self, x): self.x = x class tridaA2(tridaA): def b(self, x): self.x = x + 1 a=tridaA2() -Pôvodná správa- Od: 302302 [mailto:302...@centrum.cz] Komu: python Predmet: [python] ZámÄna funkce v instanci objektu Mám nadefinovanou tÅÃdu class tridaA(): def b(self,x): self.x=x vytvoÅÃm jejà instanci a=tridaA() mÃsto metody b, ale chci, aby se vždy v tomto objektu zavolala funkce c, která je nadefinována nÄkde mimo: def c(self, x): self.x = x+1 Pokud to ale pouze pÅiÅadÃm a zavolám a.b=c a.b(1) tak se do parametru self automaticky nepÅiÅazuje daný objekt a. Jak můžu zamÄnit funkce ve vytvoÅené instanci objektu, aby se to chovalo jako bÄžná metoda? Czenek ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python Ing. Jan Janech Katedra softverovych technologii Fakulta riadenia a informatiky Zilinska Univerzita ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] ZámÄna funkce v instanci objektu
Czenek napsal > Ano, mÄlo by to být dynamické. A vaÅ¡e ÅeÅ¡enà > se mi lÃbÃ. Jenom nechápu proÄ to nelze udÄlat > tÃm prostým pÅiÅazenÃm? Co se tedy vlastnÄ > stane, když do metody nÄjakého objektu pÅiÅadÃm > novou funkci? Zkus tenhle kód (tedy hlavnÄ poslednà tÅi Åádky): class tridaA: def b(self, x): self.x = x def c(self, x): self.x = x + 1 a = tridaA() print type(a.b) a.b = c print type(a.b) VypÃÅ¡e to: To znamená, že nejdÅÃve bylo a.b metodou instance, ale po pÅiÅazenà je to obyÄejná funkce. a.b je jen jméno. PůvodnÄ ukazuje na objekt metody. To znamená, že se taky jako metoda použÃvá. Po pÅiÅazenà se jméno a.b použije pro jiné úÄely. Je pak spojeno s odkazem na obyÄejnou funkci. Že se zrovna prvnà parametr jmenuje self nenà vůbec podstatné. Dokonce i u metod je toto jméno jen konvencÃ. NÄco jiného je, kdybys za bÄhu potÅeboval pÅehazovat jen metody stejné tÅÃdy. Zkus tohle: class tridaA: def __init__(self): self.m = self.b def b(self, x): self.x = x def c(self, x): self.x = x + 1 a = tridaA() a.m(1) print a.x a.m = a.c a.m(3) print a.x Volá se pokaždé a.m, ale ta pokaždé dÄlá nÄco jiného. pepr ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] ZámÄna funkce v instanci objektu
Ano, mÄlo by to být dynamické. A vaÅ¡e ÅeÅ¡enà se mi lÃbÃ. Jenom nechápu proÄ to nelze udÄlat tÃm prostým pÅiÅazenÃm? Co se tedy vlastnÄ stane, když do metody nÄjakého objektu pÅiÅadÃm novou funkci? Czenek Jan Janech wrote: > Este by som ale rad upozornil, ze pred pouzitim takehoto riesenia si treba > najskor dva krat poriadne premysliet, ci ho naozaj chcem pouzit. Vo vela > pripadoch je to legitimne riesenie, ale casto to znamena, ze nieco nie je v > navrhu v poriadku. > > Jan Janech > >> Popripade, ak to treba spravit dynamicky, tak >> >> a=tridaA() >> >> >> a.__class__ = tridaA2 >> >> >> ak tridaA2 pre nieco neexistuje, da sa spravit: >> >> # c je funkcia, ktora sa ma pouzit ako metoda a.b >> a.__class__ = type('tridaA', (tridaA, ), {'b': c}) >> >> >> v tom pripade ale musi byt tridaA definovana ako new-style class, teda musi >> dedit po object. >> >> Jan Janech >> >> azurIt wrote: >>> V pripade, ze ta nova funkcia bude vzdy rovnaka, tak sa toto riesi proste >>> dedenim: >>> >>> class tridaA: >>> def b(self, x): >>> self.x = x >>> >>> >>> class tridaA2(tridaA): >>> def b(self, x): >>> self.x = x + 1 >>> >>> >>> a=tridaA2() >>> >>> >>> -Pôvodná správa- Od: 302302 [mailto:302...@centrum.cz] Komu: python Predmet: [python] ZámÄna funkce v instanci objektu Mám nadefinovanou tÅÃdu class tridaA(): def b(self,x): self.x=x vytvoÅÃm jejà instanci a=tridaA() mÃsto metody b, ale chci, aby se vždy v tomto objektu zavolala funkce c, která je nadefinována nÄkde mimo: def c(self, x): self.x = x+1 Pokud to ale pouze pÅiÅadÃm a zavolám a.b=c a.b(1) tak se do parametru self automaticky nepÅiÅazuje daný objekt a. Jak můžu zamÄnit funkce ve vytvoÅené instanci objektu, aby se to chovalo jako bÄžná metoda? Czenek ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python >>> ___ >>> Python mailing list >>> Python@py.cz >>> http://www.py.cz/mailman/listinfo/python >>> >>> >>> >> >> > > ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Z�m�na funkce v instanci objektu
Este by som ale rad upozornil, ze pred pouzitim takehoto riesenia si treba najskor dva krat poriadne premysliet, ci ho naozaj chcem pouzit. Vo vela pripadoch je to legitimne riesenie, ale casto to znamena, ze nieco nie je v navrhu v poriadku. Jan Janech Popripade, ak to treba spravit dynamicky, tak a=tridaA() a.__class__ = tridaA2 ak tridaA2 pre nieco neexistuje, da sa spravit: # c je funkcia, ktora sa ma pouzit ako metoda a.b a.__class__ = type('tridaA', (tridaA, ), {'b': c}) v tom pripade ale musi byt tridaA definovana ako new-style class, teda musi dedit po object. Jan Janech azurIt wrote: V pripade, ze ta nova funkcia bude vzdy rovnaka, tak sa toto riesi proste dedenim: class tridaA: def b(self, x): self.x = x class tridaA2(tridaA): def b(self, x): self.x = x + 1 a=tridaA2() -Pôvodná správa- Od: 302302 [mailto:302...@centrum.cz] Komu: python Predmet: [python] ZámÄna funkce v instanci objektu Mám nadefinovanou tÅÃdu class tridaA(): def b(self,x): self.x=x vytvoÅÃm jejà instanci a=tridaA() mÃsto metody b, ale chci, aby se vždy v tomto objektu zavolala funkce c, která je nadefinována nÄkde mimo: def c(self, x): self.x = x+1 Pokud to ale pouze pÅiÅadÃm a zavolám a.b=c a.b(1) tak se do parametru self automaticky nepÅiÅazuje daný objekt a. Jak můžu zamÄnit funkce ve vytvoÅené instanci objektu, aby se to chovalo jako bÄžná metoda? Czenek ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python -- Ing. Jan Janech Katedra softverovych technologii Fakulta riadenia a informatiky Zilinska Univerzita ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python
Re: [python] Z�m�na funkce v instanci objektu
Popripade, ak to treba spravit dynamicky, tak a=tridaA() a.__class__ = tridaA2 ak tridaA2 pre nieco neexistuje, da sa spravit: # c je funkcia, ktora sa ma pouzit ako metoda a.b a.__class__ = type('tridaA', (tridaA, ), {'b': c}) v tom pripade ale musi byt tridaA definovana ako new-style class, teda musi dedit po object. Jan Janech azurIt wrote: V pripade, ze ta nova funkcia bude vzdy rovnaka, tak sa toto riesi proste dedenim: class tridaA: def b(self, x): self.x = x class tridaA2(tridaA): def b(self, x): self.x = x + 1 a=tridaA2() -Pôvodná správa- Od: 302302 [mailto:302...@centrum.cz] Komu: python Predmet: [python] ZámÄna funkce v instanci objektu Mám nadefinovanou tÅÃdu class tridaA(): def b(self,x): self.x=x vytvoÅÃm jejà instanci a=tridaA() mÃsto metody b, ale chci, aby se vždy v tomto objektu zavolala funkce c, která je nadefinována nÄkde mimo: def c(self, x): self.x = x+1 Pokud to ale pouze pÅiÅadÃm a zavolám a.b=c a.b(1) tak se do parametru self automaticky nepÅiÅazuje daný objekt a. Jak můžu zamÄnit funkce ve vytvoÅené instanci objektu, aby se to chovalo jako bÄžná metoda? Czenek ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python -- Ing. Jan Janech Katedra softverovych technologii Fakulta riadenia a informatiky Zilinska Univerzita ___ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python