Python:从string名称调用函数

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

3 Solutions collect form web for “Python:从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 
  • Python Pandas - 如何在列中拼合分层索引
  • 在Python中用于lexing,令牌化和parsing的资源
  • 使用OpenSSL时出现SSL后端错误
  • 用Python来抓取网页
  • 未find参数'()'和关键字参数'{}'的'*'
  • 用于维护表格数据的内存数据结构?
  • Django的 - 如何做一个模板中的元组解开'循环'
  • 如何刷新Python打印输出?
  • 如何从字典中构造一个defaultdict?
  • 如何检查一个variables是否是一个类?
  • 我怎么能在asyncio中使用请求?