我有一个类来解析来自某些在线词典的数据,它从json读取有关单词的信息,然后按照json告诉的方式执行方法。 json的一个例子:
{
"functions": [
{
"name": "find_translations",
"properties": {
"only_first": false
}
},
{
"name": "find_synonyms",
"properties": {
"number": 5
}
],
"word": "to exuberate",
"language": "angielski",
"target_language": "polski",
"collection": "default"
}
所以,我有一个方法有find_translations和find_synonyms。并且__init __正在读取json,我想用json中的参数执行函数。 我可以做一堆ifs,但我认为它不具备可扩展性。我可以做eval(),但这是一个漏洞。我该怎么办?我可以创建类似带功能的字典吗?
编辑:
这是我的课程(简化):
class Parser:
def __init__(self, path):
...
# reads data from json
...
# my problem: I need to launch methods from this class
# that were mentioned in json. In case from example, I'd launch
self.find_translations(self)
self.find_synonyms(self)
# it is an example, so without parameters
def find_translations(self):
# do something
def find_synonyms(self):
# do something
def find_usage(self):
# do something
答案 0 :(得分:2)
使用ast.literal_eval
作为eval
的更安全的替代方案:
ast.literal_eval
:安全地评估表达式节点或字符串 包含Python文字或容器显示。字符串或节点 提供的可能只包含以下Python文字结构: 字符串,字节,数字,元组,列表,dicts,集合,布尔值和None
。这可以用于安全地评估包含Python的字符串 来自不受信任来源的值,无需解析值 自己。它无法评估任意复杂性 表达式,例如涉及运算符或索引。
答案 1 :(得分:2)
您可以使用getattr函数来调用类的特定方法: -
getattr(Parser, function_name_here)(arguments_here)
我认为这就是你要求的?我希望它有所帮助。