是否可以使用exec()在python中实例化一个类?

时间:2015-07-05 22:01:54

标签: python exec eval

class Node():
    def __init__(self, value, nex = None):
        self.value = value
        self.nex = nex

class List(Node):
    def __init__(self):
        self.head = Node(6)

    def ins(self, val):
        exec('b = Node(val)')
        self.head.nex = b

我的目的是将任何字符串设置为变量名。

2 个答案:

答案 0 :(得分:0)

显然它是,因为你的代码有效(虽然我不认为它正在做你打算做的事情,你可能想在List.ins()或其他东西中更改List.head。)

>>> class List(Node):
...     def __init__(self):
...         self.head = Node(6)
...     def ins(self, val):
...         exec('b = Node(val)')
...         self.head.nex = b
...
>>> x = List()
>>> x.ins('a')
>>> x.head.value
6
>>> x.head.nex.value
'a'

至于将“任何字符串”设置为变量名称,也适用

>>> exec ("%s = %s" % (raw_input(),raw_input()))
a
'b'
>>> a
'b'

但你认真,真的,绝对不应该永远这样做(你几乎不应该使用exec)。它会真正打开你的程序直到被完全劫持。如果您尝试加载配置文件或其他内容,请考虑将这些字符串用作字典键而不是变量名。 “沙盒”的输入。

答案 1 :(得分:0)

@Benny Mackney 我通过使用setattr找到了另一种方法:

Roboto

所以现在我有了从self.n0到self.n9的9个节点 我如何连接它们以便我可以得到: self.head.nex = self.n0 self.n0.nex = self.n1 等...