python:如何使用方法名称赋值给变量动态调用类中的方法

本问题已经有最佳答案,请猛点这里访问。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class MyClass:

    def __init__(self, i):
          self.i = i

    def get(self):
          func_name = 'function' + self.i
          self.func_name() # <-- this does NOT work.

    def function1(self):
          //do something

    def function2(self):
          //do something

我得到的错误是:TypeError: 'str'对象不可调用

有人能帮忙吗?我试过很多排列组合,但都没有成功!(注:"自我。函数名'也不工作)


1
2
3
4
5
6
def get(self):
      def func_not_found(): # just in case we dont have the function
         print 'No Function '+self.i+' Found!'
      func_name = 'function' + self.i
      func = getattr(self,func_name,func_not_found)
      func() # <-- this should work!


两件事:

在第8行use中,

func_name = 'function' + str(self.i)

定义一个字符串到函数的映射为,

1
2
3
  self.func_options = {'function1': self.function1,
                       'function2': self.function2
                       }

所以它应该是这样的:

MyClass类:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
def __init__(self, i):
      self.i = i
      self.func_options = {'function1': self.function1,
                           'function2': self.function2
                           }
def get(self):
      func_name = 'function' + str(self.i)
      func = self.func_options[func_name]
      func() # <-- this does NOT work.

def function1(self):
      //do something

def function2(self):
      //do something