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