我有以下代码:
class A:
def __init__(self):
self.name = "foo"
def hello(self):
exec("def func():\n print(self.name)")
import pdb; pdb.set_trace()
aa = A()
aa.hello()
运行此代码会触发 pdb shell。然后我观察到
-> import pdb; pdb.set_trace()
(Pdb) func
<function func at 0x750d187a6950>
(Pdb) func()
*** NameError: name 'self' is not defined
所以,
func
是已知函数。但是,self
没有定义。
如何解决这个问题?
当我输入此内容时,我意识到了解决方案!!!! 将当地人视为全球人!!
那么,
class A:
def __init__(self):
self.name = "foo"
def hello(self):
exec("def func():\n print(self.name)", locals())
import pdb; pdb.set_trace()
所以方法
hello
的局部变量包含 self
因为
func
的全局上下文 - 因此 func
知道 self
是什么!
请注意,默认
exec
行为是exec(code, None, None)
与 exec(code, globals(), locals())
相同。但是 self
将 func
作为局部变量没有意义
因为它没有在函数内定义。