boost/python/scope.hpp
はじめに
Python のスコープ(名前空間)を問い合わせたり制御する機能を定義する。このスコープには新しくラップするクラスや関数を追加できる。
クラス
scope
クラス
-
class scope : public object
scope
クラスは、新しい拡張クラスおよびラップした関数がその属性として定義される Python の名前空間を制御する(自分自身に対応した)グローバルな Python オブジェクトを持つ。新しいscope
オブジェクトをデフォルトコンストラクタで構築すると、そのオブジェクトは対応するグローバルな Python のオブジェクトに束縛される。scope
オブジェクトを引数付きで構築すると、対応するグローバルな Python のオブジェクトを引数が保持するオブジェクトへ変更する。これはこのscope
オブジェクトの寿命が終わるまで続き、その時点で対応するグローバルな Python オブジェクトはscope
オブジェクトを構築する前の状態に復元する。
scope
クラスの概要
namespace boost { namespace python
{
class scope : public object
{
public:
scope(scope const&);
scope(object const&);
scope();
~scope()
private:
void operator=(scope const&);
};
}}
scope
クラスのコンストラクタおよびデストラクタ
-
explicit scope(scope const &x)
-
explicit scope(object const &x)
現在のスコープ相当オブジェクトへの参照を格納し、スコープ相当オブジェクトに x.ptr() が参照するオブジェクトを設定する。
object
基底クラスをx
で初期化する。
-
scope()
現在のスコープ相当オブジェクトへの参照を格納する。
object
基底クラスを現在のスコープ相当オブジェクトで初期化する。モジュール初期化関数の外部では、現在の相当 Python オブジェクトはNone
である。
-
~scope()
現在の相当 Python オブジェクトを格納したオブジェクトに設定する。
例
以下の例は、スコープの設定を使用して入れ子クラスを定義する方法を示している。
#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)
;
// 現在のスコープ X でクラス Y を定義する
class_<X::Y>("Y")
.def("g", &X::Y::g)
;
}
>>> import nested
>>> nested.yes
1
>>> y = nested.X.Y()
>>> y.g()
42