在Python中动态加载类

时间:2014-01-11 03:26:19

标签: python python-2.5

我正在尝试动态定义一个类,然后实例化它。为此我正在做的是,我将类定义作为一个字符串,我将它提供给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。

1 个答案:

答案 0 :(得分:4)

使用exec,而不是evalexec会执行任意代码,而eval只会评估表达式(例如eval('2+3') == 5)。

>>> data = """class f:
    def pr(self):
        print "asdfg" """
>>> exec data
>>> instance = f()
>>> instance.pr()
asdfg

但是,可能有更好的方法来实现您想要做的事情。让程序的用户创建新类似乎是一个次优的设计选择。