使用Boost.Python,有没有办法调用已经通过weakref
传递的Python函数?以下代码不起作用:
import weakref
def foo():
print 'it works'
def func():
return weakref.ref(foo)
以下是C ++:
object module = import("test");
object func(module.attr("func"));
object foo = func();
foo(); // Should print 'it works', but it prints nothing
但是,如果我在没有weakref的情况下传递函数对象,那么一切正常。有没有办法让这项工作?
答案 0 :(得分:5)
返回对象的弱引用。 如果指示对象还活着,可以通过调用引用对象来检索原始对象...
所以,给你的片段:
import weakref
def foo():
print "It Works!"
def func():
return weakref.ref(foo)
ref = func() # func returns the reference to the foo() function
original_func = ref() # calling the reference returns the referenced object
original_func() # prints "It Works!"
答案 1 :(得分:4)
这可以为你解决。
>>> import weakref
>>> def foo(): print 'it works'
...
>>> x = weakref.ref(foo)
>>> x()()
it works
>>> x()
<function foo at 0x7f56c10acc80>