Existuje jiný způsob, než změna typu za běhu:
class A: def b(self, x): self.x = x def c(self): return self.x a = A() a.b(42) assert a.x == 42 class Proxy: def __init__(self, obj): self.__dict__["_obj"] = obj def __getattr__(self, name): return getattr(self._obj, name) def __setattr__(self, name, value): return setattr(self._obj, name, value) class A2 (Proxy): def b(self, x): self.x = x+1 a = A2(a) a.b(42) assert a.x == 43 assert a.x == a.c() # dukaz, ze se to priradi skutecne objektu tridy A Schválně, co to je - já myslím, že je to návrhový vzor dekorátor :) Nevýhoda je v tom, že když se takto vytvoří delší řetěz objektů, stoupá režie. Nebo pokud opravdu chcete mít takto dynamický objekt, možná by bylo lepší nepoužívat přímo Python objekt, ale naimplementovat si ho vlastními silami pomocí slovníku a obalu, který při zavolání metody vezme funkci ze slovníku (klíčem je název) a zavolá ji se sebou samým jako první parametr té funkce. PM 2010/4/20 302302 <302...@centrum.cz>: > > 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