Boost.Python:调用类函数的回调
我有一个用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
无法被删除,所以析构函数永远不会被调用,事件处理器也不会被移除(除了在程序结束时)。
对于没有self
参数的函数(也就是自由函数或静态函数),代码运行得很好。我应该如何捕获Python的函数对象,以避免增加它们的引用计数呢?我只需要对这些对象的弱引用。
1 个回答
0
如果没有使用 weakref.ref(self.onFooEvent),你就永远无法得到你想要的效果!看看我的评论。