这是我使用 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和data是未知的,因此对self.woot(data)的调用失败。
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()
我也尝试过 compile() ,但没有运气。有什么想法吗?我真的不想通过老板手动携带自我/数据的副本并返回,因为我的真实代码更加复杂。我真的需要一种方法来保持关闭。