Как динамически вызывать методы в классе, используя присвоение имени метода переменной

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' не вызывается

Может кто-нибудь, пожалуйста, помогите с этим. Я перепробовал много перестановок и комбинаций, но безрезультатно! (примечание: "self.func_name" также не работает)

2 ответа

Решение
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!

Две вещи:

  1. В строке 8 используйте,

    func_name = 'function' + 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
    
Другие вопросы по тегам