] 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
Czenek napsal
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?
Zkus tenhle kód (tedy hlavně poslední tři řádky):
class tridaA:
def
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
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
Ještě jsem na to koukal a zjistil jsem zajimavou věc.
MethodType a UnboundMethodType jsou tentýž objekt,
čili vázané a odvázané metody jsou na oko stejného typu.
Typ zkonstruované metody závisí na argumentech:
MethodType(funkce, instance) # vrátí vázanou metodu
MethodType(funkce, None, třída)
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