Michele Simionato wrote:

> I believe decorators are in large part responsible for that. A callable
> object does not work
> as a method unless you define a custom __get__, so in decorator
> programming it is
> often easier to use a closure. OTOH closures a not optimal if you want
> persistency
> (you cannot pickle a closure) so in that case I use a callable object
> instead.

Note that it isn't necessary to write the descriptor yourself.  The
'new' module takes care of it:

In [1]: class A(object):
   ...:     pass
In [2]: a = A()
In [3]: class Method(object):
   ...:     def __call__(mself, oself):
   ...:         print mself, oself
In [4]: import new
In [5]: a.method = new.instancemethod(Method(), a, A)
In [6]: a.method()
<__main__.Method object at 0xb7ab7f6c> <__main__.A object at
0xb7ab79ec>

-Mike

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to