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

python:调用配置文件中指定的一组函数,python,json,class,Python,Json,Class,我有一个json文件,其中指定了一些需要在类的计算方法中调用的函数 json文件如下所示: {"function_definition": ["function_1","function_2","function_3"]} def function_1(self,parameter): function_1 = 1*parameter return function_1 def function_2(self,parameter): function_2 = 2*pa

我有一个json文件,其中指定了一些需要在类的计算方法中调用的函数

json文件如下所示:

{"function_definition": ["function_1","function_2","function_3"]}
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)
我在类的
\uuuu init\uuuu
方法中读取此文件,如下所示:

def __init__(self,filename):
    with open(filename) as f:
        variables = json.load(f)
    for key, value in variables.items():
                setattr(self, key, value)  
现在我需要在
compute
方法中调用这些函数。 我试着这样做:

{"function_definition": ["function_1","function_2","function_3"]}
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文件中指定为字符串的函数的正确方法是什么?

抛开这里的设计问题,您正在寻找
getattr
。您可以使用它按名称获取对象的属性(在您的示例中是方法)。之后,您可以调用
getattr
的返回值

演示:


即使
self.features\u to\u compute[index\u feature]
返回了函数本身(但它没有返回。它返回的函数名称与json文件中的名称相同),函数定义在哪里?撇开设计问题不谈,函数定义在哪里?在同一模块中?在另一个模块中?在后一种情况下,模块是否已导入?@timegeb,我已编辑了我的问题。。。函数定义为同一类的方法…谢谢!你对设计有什么建议吗?:)我不明白我的设计中是否有错误。我对您的代码了解太少,无法判断,有时按名称调用函数/方法是最简单的解决方案,因此您的设计不一定很糟糕。但是,看看您的
\uuuu init\uuuu
方法,您似乎正在尝试使用JSON保存和恢复整个对象。您是否研究过更直接的方法,如
pickle