python:调用配置文件中指定的一组函数

时间:2017-05-22 13:28:14

标签: python json class

我有一个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文件中指定的函数作为字符串调用的正确方法是什么?

1 个答案:

答案 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