我有一个json文件,我指定了一些需要在类的compute方法中调用的函数。
json文件如下所示:
{"function_definition": ["function_1","function_2","function_3"]}
我在课程的__init__
方法中阅读此文件,如下所示:
def __init__(self,filename):
with open(filename) as f:
variables = json.load(f)
for key, value in variables.items():
setattr(self, key, value)
现在我需要在compute
方法中调用这些函数。
我试着这样做:
def function_1(self,parameter):
function_1 = 1*parameter
return function_1
def function_2(self,parameter):
function_2 = 2*parameter
return function_2
def function_3(self,parameter):
function_3 = 3*parameter
return function_3
def compute(self,parameter):
output_function= {}
for index_function in range(0,len(self.function_definition)):
output_function[self.function_definition[index_feature]] =
self.features_to_compute[index_feature](parameter)
但我明白了:
TypeError: 'unicode' object is not callable
将我的conf文件中指定的函数作为字符串调用的正确方法是什么?
答案 0 :(得分:2)
将设计问题放在一边,您正在寻找getattr
。您可以使用它来按名称获取对象的属性(在您的情况下为方法)。之后,您可以调用getattr
的返回值。
演示:
>>> class foo(object):
... def __init__(self):
... self.function_definition = ['function1', 'function2']
... def function1(self):
... print('hi')
... def function2(self):
... print('bye')
... def compute(self):
... for fname in self.function_definition:
... getattr(self, fname)()
...
>>> foo().compute()
hi
bye