提振.Python:类函数的回调

Boost.Python: Callbacks to class functions

本文关键字:回调 类函数 Python 提振      更新时间:2023-10-16

我有一个用c++编写并暴露于Python的EventManager类。这是我打算在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函数对象,这样我就不会增加它们的引用计数?我只需要对对象的弱引用

如果没有weakref.ref(self.onFooEvent),您将永远无法获得预期的行为!