On Oct 22, 12:13 pm, netimen <[EMAIL PROTECTED]> wrote: > Can I substitute a method of a class by a callable object (not a > function)? I can very easy insert my function in a class as a method, > but an object - can't. > > I have the following: > > class Foo(object): > pass > > class Obj(object): > def __call__(self, obj_self): > print 'Obj' > > def func(self): > print 'func' > > f = Foo() > Foo.meth = func > f.meth() # all goes OK > Foo.meth = Obj() > f.meth() # I get TypeError: __call__() takes exactly 2 arguments (1 > given)
You have to wrap it as an (unbound) instance method explicitly: from types import MethodType Foo.meth = MethodType(Obj(), None, Foo) f.meth() For normal functions this seems to be done implicitly (of course you can do it explicitly if you want): >>> Foo.meth = func >>> print Foo.meth <unbound method Foo.func> George -- http://mail.python.org/mailman/listinfo/python-list