Python - exec从字符串定义类的成员函数

时间:2013-10-19 02:24:41

标签: python

我是Python新手并开发自定义CLI,允许用户在CLI上动态定义函数(从cmd.Cmd模块派生的Custom CLI模块)。自定义命令模块中的Overriden default()方法将获取用户输入的字符串并且必须执行代码,无论是动态函数定义还是其他自定义任务。 即我的要求是将以下CLI代码动态转换为成员函数,以便用户可以从Cli对象执行该函数

  CLI:>def abc(self):print("New fn")
  CLI:>print(cli.abc()) # Cli object pre-created
  Output: New fn

默认方法会将从CLI输入的字符串作为args。

  class CliCmd(cmd.Cmd):
         def default(self, func): # func = "def abc(self):print("New fn")"
             # Parse for function name
             funcName = func.split()[1].split("(")[0]
             exec(func) 
             setattr(self.__class__, funcName, ?) # How do I feed the function object

在旧的python中,我可以在dict中执行exec func.strip(),exec在Python 3.2中只返回None。所以,我不知道如何获取abc()的函数对象,我可以使用setattr将其与类绑定。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

如果函数位于全局命名空间中,则可以执行以下操作:

setattr(self.__class__, funcName, globals()[funcName])

http://docs.python.org/3.3/library/functions.html#globals

相关问题