python:调用配置文件中指定的一组函数
我有一个json文件,其中指定了一些需要在类的计算方法中调用的函数 json文件如下所示: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
{"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
?