Piotr Sobolewski <[EMAIL PROTECTED]> writes: > However, the second version does not work. I think I understand > why. That's because "a" inside f1 is not a function (but an object).
An object that defines __call__ is perfectly usable as a function. Your problem is that it doesn't know how to convert itself to a method, so that f1.a() knows how to pass f1 as another_self to add.__call__. To do that, add needs to be a bit smarter: >>> class add(object): ... def __call__(self, another_self): ... return another_self.version ... def __get__(self, obj, type=None): ... return lambda: self(obj) ... >>> class f(object): ... version = 17 ... a = add() ... >>> f1 = f() >>> f1.a() 17 If you can't modify add, you can probably use an adaptor that defines __get__ in a similar way. -- http://mail.python.org/mailman/listinfo/python-list