cam.ac.uk at mh391.invalid
Wed Jun 29 10:15:45 CEST 2005
> 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. :)
More information about the Python-list