substitution of a method by a callable object

Terry Reedy tjreedy at udel.edu
Wed Oct 22 22:34:44 CEST 2008


George Sakkis wrote:
> On Oct 22, 12:13 pm, netimen <neti... at gmail.com> 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:

Nope.  As the error message says, the method was called with nothing 
provided to be bound to the extraneous parameter obj_self.  Either 
provide an arg, such as with f.meth(1), *or* delete obj_self and 'Obj' 
is printed, with both 2.5 and 3.0.




More information about the Python-list mailing list