Определяет возможности для запроса и управления областью Python (пространством имен), которая будет содержать новые классы и функции.
Класс масштаба имеет связанный глобальный объект Python, который управляет пространством имен Python, в котором новые классы расширений и обернутые функции будут определены как атрибуты. Дефолт-конструкция нового объекта привязки связывает его с глобальным объектом Python. Конструирование объекта сферы действия аргументом изменяет связанный глобальный объект Python на тот, который удерживается аргументом, до тех пор, пока не закончится срок службы объекта сферы действия, и в это время связанный глобальный объект Python возвращается к тому, чем он был до того, как объект области действия был построен.
namespace boost { namespace python
{
class scope : public object
{
public:
scope(scope const&);
scope(object const&);
scope();
~scope()
private:
void operator=(scope const&);
};
}}
explicit scope(scope const& x);
explicit scope(object const& x);
Хранит ссылку на текущий ассоциированный объект сферы действия и устанавливает ассоциированный объект сферы действия на объект, упомянутый x.ptr(). Базовый класс объекта инициализируется с помощью x.
scope();
Сохраняет ссылку на текущий связанный объект объема. Базовый класс объекта инициализируется с текущим связанным объектом объема. За пределами любой функции инициализации модуля текущий объект Python не является ни одним.
~scope()
Устанавливает текущий связанный объект Python на сохраненный объект.
Следующий пример показывает, как можно использовать настройку объема для определения вложенных классов.
C++ Определение модуля:
#include <boost/python/module.hpp>
#include <boost/python/class.hpp>
#include <boost/python/scope.hpp>
using namespace boost::python;
struct X
{
void f() {}
struct Y { int g() { return 42; } };
};
BOOST_PYTHON_MODULE(nested)
{
scope().attr("yes") = 1;
scope().attr("no") = 0;
scope outer
= class_<X>("X")
.def("f", &X::f)
;
class_<X::Y>("Y")
.def("g", &X::Y::g)
;
}
Интерактивный Python:
>>> import nested
>>> nested.yes
1
>>> y = nested.X.Y()
>>> y.g()
42