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

302302 302302 na centrum.cz
Úterý Duben 20 09:56:14 CEST 2010


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: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
>>>
>>>
>>>
>>
>>
>
>


Další informace o konferenci Python