将“self”传递到通过类方法中的 python exec 定义的函数中

问题描述 投票:0回答:1

我有以下代码:

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
没有定义。

如何解决这个问题?

python exec
1个回答
0
投票

当我输入此内容时,我意识到了解决方案!!!! 将当地人视为全球人!!

那么,

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
作为局部变量没有意义 因为它没有在函数内定义。

© www.soinside.com 2019 - 2024. All rights reserved.