Adding method at runtime - problem with self
Jay Parlar
jparlar at cogeco.ca
Sun Mar 5 20:41:59 EST 2006
On Mar 5, 2006, at 2:30 PM, Marek wrote:
> Assume I want to add a method to an object at runtime. Yes, to an
> object, not a class - because changing a class would have global
> effects and I want to alter a particular object only. The following
> approach fails:
>
> class kla:
> x = 1
>
> def foo(self):
> print self.x
>
> k = kla()
> k.foo = foo
> k.foo()
>
> I know where the problem is. The method shouldn't have 'self'
> parameter. But how do I access object's attributes without it?
>
> Best regards,
>
> Marek
>
First off, it should be 'class kla(object)', but that's minor.
Try this:
import types
class kla(object):
x = 1
def foo(self):
print self.x
k = kla()
k.foo = types.MethodType(foo,k) #Makes 'foo' an instancemethod
k.foo()
Jay P.
More information about the Python-list
mailing list