我有一个用C ++编写的EventManager
类,并且暴露给Python。这就是我打算从Python端使用它的方式:
class Something:
def __init__(self):
EventManager.addEventHandler(FooEvent, self.onFooEvent)
def __del__(self):
EventManager.removeEventHandler(FooEvent, self.onFooEvent)
def onFooEvent(self, event):
pass
(add-
和remove-
作为EventManager
的静态函数公开。)
上面代码的问题是在boost::python::object
个实例中捕获了回调;当我执行self.onFooEvent
时,这些将增加self
的引用计数,这将阻止它被删除,因此析构函数永远不会被调用,因此事件处理程序永远不会被删除(除非在结束时应用程序)。
该代码适用于没有self
参数的函数(即自由或静态函数)。我应该如何捕获Python函数对象,以便我不会增加它们的引用计数?我只需要对对象的弱引用。
答案 0 :(得分:0)
如果没有weakref.ref(self.onFooEvent),你永远不会得到预期的行为!看我的评论。