Adding code and methods to a class dynamically
sarir.khamsi at raytheon.com
Thu Jul 28 19:32:23 CEST 2005
I have a class (Command) that derives from cmd.Cmd and I want to add
methods to it dynamically. I've added a do_alias() method and it would
be nice if I could turn an alias command into a real method of Command
(that way the user could get help and name completion). The code would
be generated dynamically from what gets passed to the do_alias()
method. I've tried looking in the Python cookbook and have tried:
def funcToMethod(func, clas, method_name=None):
setattr(clas, method_name or func.__name__, func)
class Command(object, cmd.Cmd):
def do_f1(self, rest): print 'In Command.do_f1()'
def do_alias(self, rest):
rest.strip() # remove leading and trailing whitespace
pat = re.compile(r'^(\w+)\s+(\w+)$')
mo = pat.search(rest)
newName = mo.group(1)
existingName = mo.group(2)
code = 'def do_' + newName + '(self, rest):\n'
code += ' self.do_' + existingName + '(rest)\n'
funcToMethod(getattr(newModule, 'do_' + existingName),
'do_' + 'existingName')
print 'Invalid alias command'
but this does not seem to work. What I get is:
(Cmd) do alias x f1
*** Unknown syntax: do alias x f1
Any suggestions? Thanks.
More information about the Python-list