Python:从string名称调用函数

我有一个str对象,例如:menu ='install'。 我想从这个string运行安装方法。 例如,当我调用菜单(一些参数),它会调用安装(一些参数)。 有没有办法做到这一点?

如果它在一个类中,则可以使用getattr:

class MyClass(object): def install(self): print "In install" method_name = 'install' # set by the command line options my_cls = MyClass() method = None try: method = getattr(my_cls, method_name) except AttributeError: raise NotImplementedError("Class `{}` does not implement `{}`".format(my_cls.__class__.__name__, method_name)) method() 

或者如果它是一个function:

 def install(): print "In install" method_name = 'install' # set by the command line options possibles = globals().copy() possibles.update(locals()) method = possibles.get(method_name) if not method: raise NotImplementedError("Method %s not implemented" % method_name) method() 

你也可以使用字典。

 def install(): print "In install" methods = {'install': install} method_name = 'install' # set by the command line options if method_name in methods: methods[method_name]() # + argument list of course else: raise Exception("Method %s not implemented" % method_name) 

为什么不能使用eval()?

 def install(): print "In install" 

新的方法

 def installWithOptions(var1, var2): print "In install with options " + var1 + " " + var2 

然后你调用下面的方法

 method_name1 = 'install()' method_name2 = 'installWithOptions("a","b")' eval(method_name1) eval(method_name2) 

这给出了输出

 In install In install with options ab