boost/python/object.hpp
はじめに
汎用的な Python のオブジェクトラッパクラス object および関連クラスをエクスポートする。引数依存の探索および object が定義する汎化演算子に絡む潜在的な問題を避けるため、これらの機能はすべて名前空間 boost::python::api で定義され、object は using 宣言で名前空間 boost::python へインポートされている。
型
slice_nil
-
class slice_nil
class slice_nil; static const _ = slice_nil();
次のように、Python のスライス式で添字を省く効果を得る型。
>>> x[:-1] >>> x[::-1]
C++ で等価なことをするには、
x.slice(_,-1) x[slice(_,_,-1)]
クラス
const_attribute_policies クラス
-
struct const_attribute_policies
const objectへの属性アクセスを表現するプロキシのためのポリシー。
const_attribute_policies クラスの概要
namespace boost { namespace python { namespace api
{
struct const_attribute_policies
{
typedef char const* key_type;
static object get(object const& target, char const* key);
};
}}}
const_attribute_policies クラスの静的関数
-
static object get(object const &target, char const *key)
- 要件
keyが ntbs。- 効果
targetの属性keyにアクセスする。- 戻り値
属性アクセスの結果を管理する
object。- 例外
error_already_set -- Python の例外が送出した場合。
attribute_policies クラス
-
struct attribute_policies : const_attribute_policies
変更可能な
objectへの属性アクセスを表現するプロキシのためのポリシー。
attribute_policies クラスの概要
namespace boost { namespace python { namespace api
{
struct attribute_policies : const_attribute_policies
{
static object const& set(object const& target, char const* key, object const& value);
static void del(object const&target, char const* key);
};
}}}
attribute_policies クラスの静的関数
-
static object const &set(object const &target, char const *key, object const &value)
- 要件
keyが ntbs。- 効果
targetの属性keyにvalueを設定する。- 例外
error_already_set -- Python の例外が送出した場合。
-
static void del(object const &target, char const *key)
- 要件
keyが ntbs。- 効果
targetの属性keyを削除する。- 例外
error_already_set -- Python の例外が送出した場合。
const_objattribute_policies クラス
-
struct const_objattribute_policies
const objectへのアクセス属性(属性名をconst objectで与える場合)を表現するプロキシのためのポリシー。
const_objattribute_policies クラスの概要
namespace boost { namespace python { namespace api
{
struct const_objattribute_policies
{
typedef object const& key_type;
static object get(object const& target, object const& key);
};
}}}
const_objattribute_policies クラスの静的関数
-
static object get(object const &target, object const &key)
- 要件
keyが文字列を保持するobject。- 効果
targetの属性keyにアクセスする。- 戻り値
属性アクセスの結果を管理する
object。- 例外
error_already_set -- Python の例外が送出した場合。
objattribute_policies クラス
-
struct objattribute_policies : const_objattribute_policies
変更可能な
objectへのアクセス属性(属性名をconst objectで与える場合)を表現するプロキシのためのポリシー。
objattribute_policies クラスの概要
namespace boost { namespace python { namespace api
{
struct objattribute_policies : const_objattribute_policies
{
static object const& set(object const& target, object const& key, object const& value);
static void del(object const&target, object const& key);
};
}}}
objattribute_policies クラスの静的関数
-
static object const &set(object const &target, object const &key, object const &value)
- 要件
keyが文字列を保持するobject。- 効果
targetの属性keyにvalueを設定する。- 例外
error_already_set -- Python の例外が送出した場合。
-
static void del(object const &target, object const &key)
- 要件
keyが文字列を保持するobject。- 効果
targetの属性keyを削除する。- 例外
error_already_set -- Python の例外が送出した場合。
const_item_policies クラス
-
struct const_item_policies
const objectへの(Python の角括弧演算子[]による)要素アクセスを表現するプロキシのためのポリシー。
const_item_policies クラスの概要
namespace boost { namespace python { namespace api
{
struct const_item_policies
{
typedef object key_type;
static object get(object const& target, object const& key);
};
}}}
const_item_policies クラスの静的関数
-
static object get(object const &target, object const &key)
- 効果
targetのkeyで指定する要素へアクセスする。- 戻り値
属性アクセスの結果を管理する
object。- 例外
error_already_set -- Python の例外が送出した場合。
item_policies クラス
-
struct item_policies : const_item_policies
変更可能な
objectへの(Python の角括弧演算子[]による)要素アクセスを表現するプロキシのためのポリシー。
item_policies クラスの概要
namespace boost { namespace python { namespace api
{
struct item_policies : const_item_policies
{
static object const& set(object const& target, object const& key, object const& value);
static void del(object const& target, object const& key);
};
}}}
item_policies クラスの静的関数
-
static object const &set(object const &target, object const &key, object const &value)
- 効果
targetのkeyで指定する要素をvalueに設定する。- 例外
error_already_set -- Python の例外が送出した場合。
-
static void del(object const &target, object const &key)
- 効果
targetのkeyで指定する要素を削除する。- 例外
error_already_set -- Python の例外が送出した場合。
const_slice_policies クラス
-
struct const_slice_policies
const objectへの(Python のスライス表記[x:y]による)スライスアクセスを表現するプロキシのためのポリシー。
const_slice_policies クラスの概要
namespace boost { namespace python { namespace api
{
struct const_slice_policies
{
typedef std::pair<handle<>, handle<> > key_type;
static object get(object const& target, key_type const& key);
};
}}}
const_slice_policies クラスの静的関数
-
static object get(object const &target, key_type const &key)
- 効果
targetのkeyで指定するスライスへアクセスする。- 戻り値
スライスアクセスの結果を管理する
object。- 例外
error_already_set -- Python の例外が送出した場合。
slice_policies クラス
-
struct slice_policies : const_slice_policies
変更可能な
objectへのスライスアクセスを表現するプロキシのためのポリシー。
slice_policies クラスの概要
namespace boost { namespace python { namespace api
{
struct slice_policies : const_slice_policies
{
static object const& set(object const& target, key_type const& key, object const& value);
static void del(object const& target, key_type const& key);
};
}}}
slice_policies クラスの静的関数
-
static object const &set(object const &target, key_type const &key, object const &value)
- 効果
targetのkeyで指定するスライスにvalueを設定する。- 例外
error_already_set -- Python の例外が送出した場合。
-
static void del(object const &target, key_type const &key)
- 効果
targetのkeyで指定するスライスを削除する。- 例外
error_already_set -- Python の例外が送出した場合。
object_operators<U> クラステンプレート
-
template<class U>
class object_operators これは
objectおよびそのproxyテンプレートの基底クラスであり、共通のインターフェイス(メンバ関数およびクラス本体内で定義しなければならない演算子)を提供する。テンプレート引数Uはobject_operators<U>の派生型という想定である。実際にはユーザはこのクラスを直接使用すべきではないが、objectとそのプロキシに対して重要なインターフェイスを提供するので、ここに記載する。
object_operators クラステンプレートの概要
namespace boost { namespace python { namespace api
{
template <class U>
class object_operators
{
public:
// 関数呼び出し
//
object operator()() const;
template <class A0>
object operator()(A0 const&) const;
template <class A0, class A1>
object operator()(A0 const&, A1 const&) const;
...
template <class A0, class A1,...class An>
object operator()(A0 const&, A1 const&,...An const&) const;
detail::args_proxy operator* () const;
object operator()(detail::args_proxy const &args) const;
object operator()(detail::args_proxy const &args,
detail::kwds_proxy const &kwds) const;
// 真偽値のテスト
//
typedef unspecified bool_type;
operator bool_type() const;
// 属性アクセス
//
proxy<const_object_attribute> attr(char const*) const;
proxy<object_attribute> attr(char const*);
proxy<const_object_objattribute> attr(object const&) const;
proxy<object_objattribute> attr(object const&);
// 要素アクセス
//
template <class T>
proxy<const_object_item> operator[](T const& key) const;
template <class T>
proxy<object_item> operator[](T const& key);
// スライシング
//
template <class T, class V>
proxy<const_object_slice> slice(T const& start, V const& end) const
template <class T, class V>
proxy<object_slice> slice(T const& start, V const& end);
};
}}}
object_operators クラステンプレートのオブザーバ関数
-
object operator()(detail::args_proxy const &args, detail::kwds_proxy const &kwds) const
- 効果
タプル
argsで与えた引数と辞書kwdsで与えた名前付き引数でobjectを呼び出す。
-
operator bool_type() const
-
proxy<const_object_objattribute> attr(object const&) const
-
proxy<object_objattribute> attr(object const&)
- 要件
nameは文字列を保持するobject。- 効果
*this の名前
nameの属性にアクセスする。- 戻り値
ターゲットに object(*static_cast<U*>(this)) を、キーに
nameを束縛したproxyオブジェクト。
-
template<class T>
proxy<const_object_item> operator[](T const &key) const -
template<class T>
proxy<object_item> operator[](T const &key)
object クラス
-
class object : public object_operators<object>
目的は
objectが可能な限り Python の変数のように振舞うことである。これにより Python で動作する式は概して C++ でも同じ方法で動作するはずである。objectの大部分のインターフェイスは、基底クラスobject_operators<object>とこのヘッダが定義する自由関数が提供する。
object クラスの概要
namespace boost { namespace python { namespace api
{
class object : public object_operators<object>
{
public:
object();
object(object const&);
template <class T>
explicit object(T const& x);
~object();
object& operator=(object const&);
PyObject* ptr() const;
bool is_none() const;
};
}}}
object クラスのコンストラクタおよびデストラクタ
-
object()
- 効果
Python の
Noneオブジェクトへの参照を管理するオブジェクトを構築する。- 例外
なし。
-
template<class T>
explicit object(T const &x) - 効果
xを Python に変換し、それへの参照を管理する。- 例外
error_already_set -- 上記の変換が不可能な場合(Python の
TypeError例外を設定する)。
-
~object()
- 効果
内部で保持するオブジェクトの参照カウントを減らす。
object クラスの変更メソッド
object クラスのオブザーバ関数
-
PyObject *ptr() const
- 戻り値
内部で保持している Python オブジェクトへのポインタ。
proxy クラステンプレート
-
template<class Policies>
class proxy : public object_operators<proxy<Policies>> objectに対する属性、要素およびスライスアクセスを実装するために、このドキュメントで述べた種々のポリシー(Policies)とともにこのテンプレートをインスタンス化する。Policies::key_type型のオブジェクトを格納する。
proxy クラステンプレートの概要
namespace boost { namespace python { namespace api
template <class Policies>
class proxy : public object_operators<proxy<Policies> >
{
public:
operator object() const;
proxy const& operator=(proxy const&) const;
template <class T>
inline proxy const& operator=(T const& rhs) const;
void del() const;
template <class R>
proxy operator+=(R const& rhs);
template <class R>
proxy operator-=(R const& rhs);
template <class R>
proxy operator*=(R const& rhs);
template <class R>
proxy operator/=(R const& rhs);
template <class R>
proxy operator%=(R const& rhs);
template <class R>
proxy operator<<=(R const& rhs);
template <class R>
proxy operator>>=(R const& rhs);
template <class R>
proxy operator&=(R const& rhs);
template <class R>
proxy operator|=(R const& rhs);
};
}}}
proxy クラステンプレートのオブザーバ関数
proxy クラステンプレートの変更関数
-
proxy const &operator=(proxy const&) const
-
template<class T>
inline proxy const &operator=(T const &rhs) const
-
template<class R>
proxy operator+=(R const &rhs) -
template<class R>
proxy operator-=(R const &rhs) -
template<class R>
proxy operator*=(R const &rhs) -
template<class R>
proxy operator/=(R const &rhs) -
template<class R>
proxy operator%=(R const &rhs) -
template<class R>
proxy operator<<=(R const &rhs) -
template<class R>
proxy operator>>=(R const &rhs) -
template<class R>
proxy operator&=(R const &rhs) -
template<class R>
proxy operator|=(R const &rhs)
-
void del() const
- 効果
プロキシのターゲットオブジェクトとキーオブジェクトを使用して Policies::del(target, key)。
関数
-
template<class L, class R>
object operator>(L const &l, R const &r) -
template<class L, class R>
object operator>=(L const &l, R const &r) -
template<class L, class R>
object operator<(L const &l, R const &r) -
template<class L, class R>
object operator<=(L const &l, R const &r) -
template<class L, class R>
object operator==(L const &l, R const &r) -
template<class L, class R>
object operator!=(L const &l, R const &r)
-
template<class L, class R>
object operator+(L const &l, R const &r) -
template<class L, class R>
object operator-(L const &l, R const &r) -
template<class L, class R>
object operator*(L const &l, R const &r) -
template<class L, class R>
object operator/(L const &l, R const &r) -
template<class L, class R>
object operator%(L const &l, R const &r) -
template<class L, class R>
object operator<<(L const &l, R const &r) -
template<class L, class R>
object operator>>(L const &l, R const &r) -
template<class L, class R>
object operator&(L const &l, R const &r) -
template<class L, class R>
object operator^(L const &l, R const &r) -
template<class L, class R>
object operator|(L const &l, R const &r)
-
template<class R>
object &operator+=(object &l, R const &r) -
template<class R>
object &operator-=(object &l, R const &r) -
template<class R>
object &operator*=(object &l, R const &r) -
template<class R>
object &operator/=(object &l, R const &r) -
template<class R>
object &operator%=(object &l, R const &r) -
template<class R>
object &operator<<=(object &l, R const &r) -
template<class R>
object &operator>>=(object &l, R const &r) -
template<class R>
object &operator&=(object &l, R const &r) -
template<class R>
object &operator^=(object &l, R const &r) -
template<class R>
object &operator|=(object &l, R const &r)
例
def sum_items(seq):
result = 0
for x in seq:
result += x
return result
object sum_items(object seq)
{
object result = object(0);
for (int i = 0; i < len(seq); ++i)
result += seq[i];
return result;
}