rank vote url
59 383 111 805 url

通过函数名的字符串来调用这个函数

加入我们有个模块叫foo,而我有一个"bar"字符串.调用foo.bar()有什么最好的方法?

我需要返回函数值,为什么我不能用eval.我想应该能用eval来定义一个函数来返回调用的结果,但是我希望更优雅的方法.


假设foo有一个bar方法:

  1. import foo
  2. methodToCall = getattr(foo, 'bar')
  3. result = methodToCall()

第二行和第三行可以简写:

  1. result = getattr(foo, 'bar')()

如果让上面的代码更有意义.getattr可以用在实例绑定,模块级方法,类方法…等等