[python] Záměna funkce v instanci objektu

Jan Janech devel na atlas.sk
Úterý Duben 20 09:14:33 CEST 2010


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:302302 na centrum.cz]
>> Komu: python <python na 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 na py.cz
>> http://www.py.cz/mailman/listinfo/python
> _______________________________________________
> Python mailing list
> Python na py.cz
> http://www.py.cz/mailman/listinfo/python
> 
> 
> 


-- 

____________________________
Ing. Jan Janech
Katedra softverovych technologii
Fakulta riadenia a informatiky
Zilinska Univerzita


Další informace o konferenci Python