Just a guess, but setting "__X__" special methods won't work in most cases because these are usually optimized when the class is created.
It might work if a.__call__ did exist before (because class a: contained a __call__ definition). Andreas On Wed, Jun 29, 2005 at 09:15:45AM +0100, Michael Hoffman wrote: > Rahul wrote: > > Consider the following: > > def a(x): > > return x+1 > > > > def b(f): > > def g(*args,**kwargs): > > for arg in args: > > print arg > > return f(*args,**kwargs) > > return g > > > > a.__call__ = b(a.__call__) > > > > now calling a(1) and a.__call__(1) yield 2 different results!! > > i.e. for functions a(1) doesnt seem to be translated to a.__call__ if > > you assign a new value to a.__call__? > > I don't know why this happens, but setting the __call__ attribute of a > is a pretty strange thing to do. Why not just set a instead? The > original function a(x) will still be stored as a closure in what is > returned from b(). > > If this is of purely academic interest then the answer is I don't know. :) > -- > Michael Hoffman > -- > http://mail.python.org/mailman/listinfo/python-list -- http://mail.python.org/mailman/listinfo/python-list