Sarir Khamsi wrote: > 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) > if mo: > newName = mo.group(1) > existingName = mo.group(2) > code = 'def do_' + newName + '(self, rest):\n' > code += ' self.do_' + existingName + '(rest)\n' > exec code > funcToMethod(getattr(newModule, 'do_' + existingName), > self, > 'do_' + 'existingName') > else: > print 'Invalid alias command' > > but this does not seem to work.
If it's truly just an alias you want, then something like this should work better. Replace everything in the if mo: section with this: if mo: newName = mo.group(1) existingName = mo.group(2) existingMethod = getattr(self, 'do_' + existingName) setattr(self, 'do_' + newName, existingMethod) -Peter -- http://mail.python.org/mailman/listinfo/python-list