Adding code and methods to a class dynamically

Sarir Khamsi sarir.khamsi at
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 =
      if mo:
         newName =
         existingName =
         code = 'def do_' + newName + '(self, rest):\n'
         code += '   self.do_' + existingName + '(rest)\n'
         exec code
         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 mailing list