[Tutor] Adding method to class after class initialization

Remco Gerlich scarblac@pino.selwerd.nl
Fri, 17 Nov 2000 08:02:07 +0100


On Fri, Nov 17, 2000 at 12:47:42AM -0600, Stephan Richter wrote:
> Hello everyone,
> 
> here a hard nut to crack:
> Let's say I do the following:
> 
>  >>> def add(self, x, y):
> ...        return x+y
>  >>> class Test:
> ...        pass
>  >>> t = Test()
>  >>> t.add = add
> 
> But if I now call 'a.add(3, 3)' I did not pass enough arguments, since self 
> is not passed automatically. How can I fix that? Is there something like 
> setattr just for a method?

If you define a method in a class, it is a "bound method", meaning that
the self is passed automatically. Setting it as t.add=add means that t.add
is just another variable, where its value happens to be a function.

You can make new codeobjects with the 'new' module. Use new.instancemethod
here:

>>> t.add = new.instancemethod(add, t, Test)

-- 
Remco Gerlich