On Jun 2, 12:27 am, Steven Bethard <[EMAIL PROTECTED]> wrote: > I think you want to define __get__ on your Observable class so that it > can do the right thing when the method is bound to the instance: > > >>> class Observable(object): > ... def __init__(self, func, instance=None, observers=None): > ... if observers is None: > ... observers = [] > ... self.func = func > ... self.instance = instance > ... self.observers = observers > ... def __get__(self, obj, cls=None): > ... if obj is None: > ... return self > ... else: > ... func = self.func.__get__(obj, cls) > ... return Observable(func, obj, self.observers) > ... def __call__(self, *args, **kwargs): > ... result = self.func(*args, **kwargs) > ... for observer in self.observers: > ... observer(self.instance) > ... return result > ... def add_callback(self, callback): > ... self.observers.append(callback) > ... > >>> class SomeActor(object): > ... @Observable > ... def meth(self, foo): > ... print foo > ... > >>> def callback(instance): > ... print "Yippie, I've been called on", instance > ... instance.bar = True > ...
Is this desired behavior? >>> a = SomeActor() >>> b = SomeActor() >>> a.meth.observers is b.meth.observers True >>> a.meth.add_callback(callback) >>> b.meth(42) 42 Yippie, I've been called on <__main__.SomeActor object at 0x00C23550> -- David -- http://mail.python.org/mailman/listinfo/python-list