I tried this:

>>>class test(object):
...     def __call1(self):
...             print 1
...     __call__ = __call1
...
>>>t = test()
>>>t()
1
>>>

Is that what you were looking for?

--
Alan McIntyre
ESRG LLC
http://www.esrgtech.com

Stefan Behnel wrote:
Hi!

This somewhat puzzles me:

Python 2.4 (#1, Feb  3 2005, 16:47:05)
[GCC 3.3.4 (pre 3.3.5 20040809)] on linux2
Type "help", "copyright", "credits" or "license" for more information.

.>>> class test(object):
...   def __init__(self):
...     self.__call__ = self.__call1
...   def __call1(self):
...     print 1
...   def __call__(self):
...     print 2
...
.>>> t = test()
.>>> t()
2

If I take out the __call__ method completely and only set it in __init__, I get a TypeError saying that test is not callable.

I want to use this in order to provide different implementations based on the object configuration. Calculating the right function to call is non-trivial and calls are frequent, so I want to change __call__ in order to run the right function directly.

I know, I could use another level of indirection:

def __call__(self):
  self.the_right_method()

and then set the_right_method accordingly, but I find that somewhat sub-optimal. Is there a way to change __call__ after class creation?

Stefan

-- http://mail.python.org/mailman/listinfo/python-list

Reply via email to