Python:使用字符串作为对象参数?

标签 python string object types type-conversion

本质上我的问题如下......

在 Python 中,我有一个函数将返回以下形式的输出字符串:

'union(symbol(a), symbol(b))'

在此字符串中找到的函数形式实际上存在于名为 RegExTree 的对象类中。此外,该类还包含一个使用函数“construct()”构造树数据结构的函数,如下所示:

tree = RegExTree()    
tree.construct(union(symbol(a), symbol(b))

上面两行代码可以正常工作,根据构造函数中的参数解析来构造一棵树。我想以类似的方式传递一个字符串,也许这行代码说明了我想要的:

tree = RegExTree()      
expression = 'union(' + 'symbol(' + 'a' + ')' + ', ' +  'symbol(' + 'b' + ')' + ')'
tree.construct(expression)

现在,我按照上面编写的代码的方式会产生一个错误(在 Linux 终端中),如下所示:

$ Attribute Error: 'str' object has no attribute 'value'

你能强制Python将字符串解释为有效的参数/代码行吗?本质上,不是作为字符串,而是作为对象构造函数。

有没有办法让Python将字符串解释为被解析/编译成对象的东西,并让它从字符串构造对象,就好像它是一行旨在描述相同最终目标的代码一样? 我要求某种后门类型转换吗?或者我所要求的在编程语言中是不可能的,特别是Python?

编辑:使用下面涉及“eval()”的迈克尔的解决方案,有一种方法可以将其破解为表单:

tree = RegExTree()
a = 'a'
b = 'b'    
expression = 'union(' + 'symbol(' + a + ')' + ', ' +  'symbol(' + b + ')' + ')'
tree.construct(eval(expression))

有更好的方法吗?或者只是我的输出作为表示函数的字符串的本质不是一个好主意? [感谢 martineau 对我的解决方案编辑的更正!]

最佳答案

您可以使用python内置eval声明。

但请注意...您不希望对作为用户提供的外部输入进入程序的字符串运行eval()。这可能会造成一个安全漏洞,程序的用户可以在其中运行自己设计的任意 Python 代码。

在您的示例中,它看起来像这样:

tree = RegExTree()      
expression = 'union(' + 'symbol(' + 'a' + ')' + ', ' +  'symbol(' + 'b' + ')' + ')'
tree.construct( eval(expression) ) # Notice the eval statement here

关于Python:使用字符串作为对象参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13449659/

相关文章:

python - 在 Django 中强制执行严格的 SQL 模式

python - 如果可以的话,如何强制 Socket 中的 recv() 不将我的十六进制值转换为 ASCII(python)

python - 使用并发.futures 的多线程/多处理解决方案

python - 如何修剪空白?

c - 分离数据并存储在数组中

c++ - 返回 C++ 对象时的复制和销毁

python - Python 对象实例是该语言中唯一的对象吗?

python - 我得到一个 "TypeError: ' int' 对象没有属性 '_getitem',我不知道为什么

Python拆分字符串以找到最大的奇数整数

c - SWIG R 包装器未正确设置类/从 C 内存指针创建 R 对象