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:[email protected]]
Komu: python <[email protected]>
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
[email protected]
http://www.py.cz/mailman/listinfo/python
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python
--
____________________________
Ing. Jan Janech
Katedra softverovych technologii
Fakulta riadenia a informatiky
Zilinska Univerzita
_______________________________________________
Python mailing list
[email protected]
http://www.py.cz/mailman/listinfo/python