我有一个类来解析一些在线字典中的数据,它从json读取有关word的信息,然后执行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那样使用参数来执行函数。我可以做很多的假设,但我想它不是可伸缩的。我可以做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
发布于 2018-03-13 05:07:21
您可以使用getattr函数调用类的特定方法,如下所示:
getattr(Parser, function_name_here)(arguments_here)
我想这就是你想要的?希望能帮上忙。
发布于 2018-03-13 04:53:54
使用ast.literal_eval
作为eval
的更安全的替代方案
来自文档
ast.literal_eval
:安全地计算表达式节点或包含Python文字或容器显示的字符串。提供的字符串或节点可能只包含以下Python文字结构:字符串、字节、数字、元组、列表、迪克、集、布尔值和None
。 这可以用于从不受信任的来源安全地计算包含Python值的字符串,而不需要自己解析值。它不能评估任意复杂的表达式,例如涉及运算符或索引。
https://stackoverflow.com/questions/49256431
复制相似问题