То, что вы хотите, это boost :: python :: scope .
Python не имеет понятия «пространства имен», но вы можете использовать класс, очень похожий на пространство имен:
#include <boost/python/module.hpp>
#include <boost/python/class.hpp>
#include <boost/python/scope.hpp>
using namespace boost::python;
namespace a
{
class A{};
namespace b
{
class B{};
}
}
class DummyA{};
class DummyB{};
BOOST_PYTHON_MODULE(mymodule)
{
// Change the current scope
scope a
= class_<DummyA>("a")
;
// Define a class A in the current scope, a
class_<a::A>("A")
//.def("somemethod", &a::A::method)
;
// Change the scope again, a.b:
scope b
= class_<DummyB>("b")
;
class_<a::b::B>("B")
//.def("somemethod", &a::b::B::method)
;
}
Тогда в python у вас есть:
#!/usr/bin/env python
import mylib
print mylib.a,
print mylib.a.A
print mylib.a.b
print mylib.a.b.B
Все a
, a.A
, a.b
и a.b.B
на самом деле являются классами, но вы можете обрабатывать a
и a.b
так же, как пространства имен - и никогда не создавать их на самом деле