strange __call__

Michael Hoffman at mh391.invalid
Wed Jun 29 10:15:45 CEST 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