[英]Boost.Python: Callbacks to class functions
我有一個用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)你永遠不會得到你預期的行為! 看我的評論。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.