46
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):
        pass # do something

    def function2(self):
        pass # do something

これにより、次のエラーが発生します。TypeError: 'str' object is not callable

どうすればこれを行うことができますか?

注:self.func_nameこれも機能しません

4

2 に答える 2

58
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!
于 2013-05-20T03:32:32.237 に答える
4

2つのこと:

  1. ライン8の使用では、

    func_name = '関数' + str(self.i)

  2. 文字列から関数へのマッピングを次のように定義します。

      self.func_options = {'function1': self.function1,
                           'function2': self.function2
                           }
    
  3. したがって、次のようになります。

    クラス MyClass:

    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
    
于 2013-05-20T03:51:17.767 に答える