[EMAIL PROTECTED] wrote:
On 26 juin, 17:18, Allen <[EMAIL PROTECTED]> wrote:
I need a way to add a method to an existing instance, but be as close as
possible to normal instance methods.
def set_method(obj, func, name=None):
if not name:
name = func.__name__
setattr(obj, name, func.__get__(obj, type(obj)))
class Toto(object):
pass
toto = Toto()
def titi(self):
print self
set_method(toto, titi)
I tried that. func.__get__(obj, type(obj)) creates a bound method and
then sets an attribute to that, creating a cyclic reference. toto
contains a reference to the bound method, the bound method contains a
reference to the instance toto.
However it does eliminate the need for FunctionCaller. Instead of:
return InstanceFunctionHelper.FunctionCaller(self, funcs[name])
__getattr__(...) can just do:
return funcs[name].__get__(self, type(self))
to get the same behavior.
All of the extra __setattr__ and __delattr__ exist so that if the
attribute is set after a function is set, it will delete the function so
that later deleting the attribute will not make the function visible again.
Brian Vanderburg II
--
http://mail.python.org/mailman/listinfo/python-list