当我的C ++库在Python中导入时,我需要调用InitGoogleLogging()。我的C ++库使用Boost.Python。
导入库时如何调用函数?
答案 0 :(得分:6)
python中没有真正的“定义”。当您导入时,您在 .py 模块中放置的任何代码已执行。恰好在包文件中放置代码的大部分时间都是“definiton”代码,如 class 或 def 。实际上,该代码仍然会被执行,因此它只会创建您的类和函数定义。从模块中的根命名空间(缩进)调用函数将导致在加载模块后立即调用它。
只需将它们放入__init__.py即可。请参阅http://www.boost.org/doc/libs/1_45_0/libs/python/doc/tutorial/doc/html/python/techniques.html#python.extending_wrapped_objects_in_python,其中介绍了如何使用别名导出包,然后在 init .py中平展命名空间。
即。 (这将是名为 foo 的子目录中的 __ init __。py :
from _foo import *
InitGoogleLogging()
另一种方法是直接从C ++包装器模块调用它:
BOOST_PYTHON_MODULE(foo)
{
InitGoogleLogging();
class_<Foo>("Foo")
.def("bar", &bar)
;
}