Как динамически вызывать методы в классе с использованием назначения имени метода для переменной
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" также не работает)
Ответы
Ответ 1
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!
Ответ 2
Две вещи:
-
В строке 8 используйте
func_name = 'function' + str (self.i)
-
Определить строку для отображения функции как,
self.func_options = {'function1': self.function1,
'function2': self.function2
}
-
Поэтому он должен выглядеть так:
класс 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