strange __call__

Michael Hoffman cam.ac.uk at mh391.invalid
Wed Jun 29 04:15:45 EDT 2005


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



More information about the Python-list mailing list