我正在尝试动态定义一个类,然后实例化它。为此我正在做的是,我将类定义作为一个字符串,我将它提供给eval函数以在运行时定义它。
f="""class f:
def pr(self):
print "asdfg"
"""
>>> eval(f)
Traceback (most recent call last):
File "<pyshell#5>", line 1, in <module>
eval(f)
File "<string>", line 1
class f:
^
SyntaxError: invalid syntax
为什么我这样做是因为有很多类可以使用,但很少需要它们一起使用。另外,我允许用户向应用程序添加新类。
提前致谢。
编辑-------------------
这是python 2.5输出
data = """class f:
def pr(self):
print "asdfg"
"""
>>> exec(data)
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
exec(data)
File "<string>", line 4
^
SyntaxError: invalid syntax
#What i think the problem is "\n"
>>> data
'class f:\n def pr(self):\n print "asdfg"\n '
我不确定,但这是错误指向的地方。
使用python 2.5的原因是,scapy是程序的一部分,它只支持python 2.5。
答案 0 :(得分:4)
使用exec
,而不是eval
。 exec
会执行任意代码,而eval
只会评估表达式(例如eval('2+3') == 5
)。
>>> data = """class f:
def pr(self):
print "asdfg" """
>>> exec data
>>> instance = f()
>>> instance.pr()
asdfg
但是,可能有更好的方法来实现您想要做的事情。让程序的用户创建新类似乎是一个次优的设计选择。