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

2024-09-30 06:33:07 发布

您现在位置:Python中文网/ 问答频道 /正文

基本上我的问题是。。。在

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

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

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

^{pr2}$

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

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

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

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

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

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

编辑:使用下面提到的涉及“eval()”的Michael解决方案,有一种方法可以将其转化为形式:

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

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


Tags: 对象方法函数字符串代码tree编辑参数
1条回答
网友
1楼 · 发布于 2024-09-30 06:33:07

您可以使用python内置的^{}语句。在

不过,还是要提醒一下。。。您不希望对作为用户提供的外部输入进入程序的字符串运行eval()。这可能会造成一个安全漏洞,让程序的用户可以运行他们自己设计的任意Python代码。在

在你的例子中,它看起来像这样:

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

相关问题 更多 >

    热门问题