模块导入时的boost.python代码

时间:2011-02-28 03:59:18

标签: python boost-python

当我的C ++库在Python中导入时,我需要调用InitGoogleLogging()。我的C ++库使用Boost.Python。

导入库时如何调用函数?

1 个答案:

答案 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)
    ;
}