Hello,
I am trying to find the way to create and add a method to a class instance
dynamically (ie at run time).
This is one of my try :
import new
class AddMethod:
def add(self):
self.id = 10
code = '''lambda self: self.id'''
byteCode = compile(code, 'addMethod.py', 'single')
print byteCode.co_argcount
function = new.function(byteCode, self.__class__.__dict__)
method = new.instancemethod(function, self, self.__class__)
setattr(self, 'getId', method)
if __name__ == '__main__':
a = AddMethod()
a.add()
a.getId()
When running that, I get the following error message (I get the same error whatever
I pass to the kind argument of compile):
Traceback (innermost last):
File "d:\Program Files\Python\Pythonwin\pywin\framework\scriptutils.py", line 301,
in RunScript
exec codeObject in __main__.__dict__
File "E:\Code\Python\god\addMethod.py", line 17, in ?
a.getId()
TypeError: no arguments expected
So I am trying to know how to create byteCode which needs arguments.
I have tried to replace my code string with the following :
code = '''
def getId(self):
return self.id
'''
But the I get the following error message:
Traceback (innermost last):
File "d:\Program Files\Python\Pythonwin\pywin\framework\scriptutils.py", line 301,
in RunScript
exec codeObject in __main__.__dict__
File "E:\Code\Python\god\addMethod.py", line 19, in ?
File "E:\Code\Python\god\addMethod.py", line 10, in add
method = new.instancemethod(function, self, self.__class__)
File "<string>", line 2
def getId(self):
^
SyntaxError: invalid syntax
Any help would be appreciated.
--
Godefroid Chapelle
BubbleNet
30, rue Victor Horta
B-1348 Louvain-la-Neuve (Belgium)
+32 (10) 45 06 46
_______________________________________________
ActivePython mailing list
[EMAIL PROTECTED]
http://listserv.ActiveState.com/mailman/listinfo/activepython