Is there a way to change __call__ after class creation?
Check out this thread on the topic:
http://mail.python.org/pipermail/python-list/2004-January/203142.html
Basically, the answer is no -- at least not on a per-instance basis. You can try something like:
py> class Test(object): ... def __new__(cls): ... cls.__call__ = cls.call1 ... return object.__new__(cls) ... def call1(self): ... print 'call1' ... def __call__(self): ... print '__call__' ... py> Test()() call1
But then the call method is changed for all instances:
py> class Test(object): ... instances = 0 ... def __new__(cls): ... if cls.instances == 1: ... print "setting __call__" ... cls.__call__ = cls.call1 ... cls.instances += 1 ... return object.__new__(cls) ... def call1(self): ... print 'call1' ... def __call__(self): ... print '__call__' ... py> t1 = Test() py> t1() __call__ py> t2 = Test() setting __call__ py> t2() call1 py> t1() call1
Steve -- http://mail.python.org/mailman/listinfo/python-list