Re: Adding code and methods to a class dynamically
- From: Peter Hansen <peter@xxxxxxxxxxx>
- Date: Thu, 28 Jul 2005 14:00:17 -0400
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 .
- Follow-Ups:
- Re: Adding code and methods to a class dynamically
- From: Sarir Khamsi
- Re: Adding code and methods to a class dynamically
- References:
- Adding code and methods to a class dynamically
- From: Sarir Khamsi
- Adding code and methods to a class dynamically
- Prev by Date: Re: Regex for nested {}
- Next by Date: Re: On fighting fire with fire...
- Previous by thread: Adding code and methods to a class dynamically
- Next by thread: Re: Adding code and methods to a class dynamically
- Index(es):