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 <python@py.cz>
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

Odpovedet emailem