Piotr Sobolewski <[EMAIL PROTECTED]> writes: > I would like to use a callable object as a method of a class. So, when I > have such normal class: > > I want to change it to something like that: > > class add: > def __call__(self, another_self): > return another_self.version > > class f: > version = 17 > a = add() > > f1 = f() > print f1.a() > > 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). So f1.a is not a > method. So when I do f1.a(), the implicit argument self is not passed. > > Q1: Am I right? Is this the problem? > Q2: What can I do to make it work?
Use the right argument for the call. Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> class add: def __call__(self, another_self): return another_self.version ... ... ... >>> class f: version = 17 a = add() ... ... ... >>> f1 = f() >>> f1 <__main__.f instance at 0x00A805D0> >>> f1.a <__main__.add instance at 0x00A80DA0> >>> f1.a() Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: __call__() takes exactly 2 arguments (1 given) >>> f1.a(f1) 17 >>> HTH -- http://mail.python.org/mailman/listinfo/python-list