从类实例调用exec()中的函数

时间:2016-12-21 07:47:38

标签: python

我有一个自动生成的Python代码片段,我想在类实例中exec()

简化的代码段如下所示:

prog = """
def func1():
  func2()

def func2():
  pass

func1()
"""

class test():
    def run(self):
        exec(prog)

test().run()   # results in NameError: name 'func2' is not defined
exec(prog)     # works

虽然在这两种情况下都可以调用func1(),但在func2来自班级时找不到exec()。如果我先运行exec(prog),那么即使test().run()成功也是如此。似乎前一个exec调用将func2留在命名空间中的某个位置,以后可以在类中调用它时找到它。

是否有一种简单而干净的方法可以在类中调用包含多个函数的代码片段?

3 个答案:

答案 0 :(得分:2)

您可以使用exec(prog, globals())来执行全局命名空间中的代码。

答案 1 :(得分:1)

不是我赞同使用exec ...但是声明函数名称global

prog = """
global func1, func2
def func1():
  func2()

def func2():
  pass

func1()
"""

答案 2 :(得分:1)

使用exec是多余的。

class本身就是一个可执行语句。