这是我使用 Python 的第三天,所以请原谅新手的错误。这是我的工作代码。person.test()向老板注册回调,老板调用回调,一切正常。
class Boss:
def registerCallback(self,cb):
self.cb = cb
def doCallback(self):
self.cb()
class Person:
def woot(self,data):
print("Woot! ",data)
def test(self,boss,data):
def callback ():
self.woot(data)
boss.registerCallback(callback)
boss = Boss()
person = Person()
person.test(boss,1)
boss.doCallback()
但是,如果我将回调移动到 exec() 中,则闭包就会丢失。回调运行,但是self and data未知,因此请致电self.woot(数据) fails.
class Boss:
def registerCallback(self,cb):
self.cb = cb
def doCallback(self):
self.cb()
class Person:
def woot(self,data):
print("Woot! ",data)
def test(self,boss,data):
x = "def callback():\n self.woot(data)\nboss.registerCallback(callback)"
exec(x,globals(),locals())
boss = Boss()
person = Person()
person.test(boss,1)
boss.doCallback()
我也尝试编译(),但没有成功。有什么想法吗?我真的不想手动携带自我/数据的副本通过老板并返回,因为我现实生活中的代码要复杂得多。我真的需要一种方法来维持关闭。