Re: [python] html do pdf

2010-04-20 Tema obsahu azurIt
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

2010-04-20 Tema obsahu Jirka Vejrazka
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

2010-04-20 Tema obsahu Petr Blahos
> 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

2010-04-20 Tema obsahu Ondrej Beranek
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

2010-04-20 Tema obsahu petrofF
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

2010-04-20 Tema obsahu Petr Messner
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

2010-04-20 Tema obsahu Přikryl Petr
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-04-20 Tema obsahu Petr Messner
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

2010-04-20 Tema obsahu Přikryl Petr


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

2010-04-20 Tema obsahu Hynek Fabian
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

2010-04-20 Tema obsahu Jirka Vejrazka
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

2010-04-20 Tema obsahu petrofF
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

2010-04-20 Tema obsahu Jan Janech
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

2010-04-20 Tema obsahu Hynek Fabian


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

2010-04-20 Tema obsahu Petr Messner
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

2010-04-20 Tema obsahu Jan Janech

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

2010-04-20 Tema obsahu Přikryl Petr
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

2010-04-20 Tema obsahu 302302

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

2010-04-20 Tema obsahu Jan Janech
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

2010-04-20 Tema obsahu 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