boost/python/object.hpp
Разоблачает общий объект класса обертки Python и связанные с ним классы. Чтобы избежать некоторых потенциальных проблем с поиском, зависящим от аргументов, и обобщенными операторами, определенными на объекте, все эти объекты определяются в увеличении пространства имен::python::api, и объект импортируется в увеличение пространства имен::python с помощью декларации использования.
class slice_nil ;
static const _ = slice_nil ();
Тип, который можно использовать для получения эффекта исключения индекса в выражении среза Python:
>>> x [:- 1 ]
>>> x [::- 1 ]
Эквивалент C++:
x . slice ( _ ,- 1 )
x [ slice ( _ , _ ,- 1 )]
Политики, которые используются для прокси, представляющих доступ атрибута к объекту const.
namespace boost { namespace python { namespace api
{
struct const_attribute_policies
{
typedef char const * key_type ;
static object get ( object const & target , char const * key );
};
}}}
static object get ( object const & target , char const * key );
Requires
Ключ - этоntbs .
Effects
получает доступ к атрибуту цели, названному ключом.
Returns
Объект, управляющий результатом доступа к атрибуту.
Throws
Ошибка_already_set Если вы используете Python.
Политики, которые используются для прокси, представляющих доступ атрибута к изменчивому объекту.
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 );
};
}}}
static object const & set ( object const & target , char const * key , object const & value );
Requires
Ключ - этоntbs .
Effects
устанавливает атрибут цели, названный ключом к значению.
Throws
Ошибка_already_set Если вы используете Python.
static void del ( object const & target , char const * key );
Requires
Ключ - этоntbs .
Effects
Удалить атрибут цели, названный ключом.
Throws
Ошибка_already_set Если вы используете Python.
Политики, которые используются для прокси, представляющих доступ атрибута к объекту const, когда имя атрибута дается как объект const.
namespace boost { namespace python { namespace api
{
struct const_objattribute_policies
{
typedef object const & key_type ;
static object get ( object const & target , object const & key );
};
}}}
static object get ( object const & target , object const & key );
Requires
Ключ — это объект, удерживающий струну.
Effects
получает доступ к атрибуту цели, названному ключом.
Returns
Объект, управляющий результатом доступа к атрибуту.
Throws
Ошибка_already_set Если вы используете Python.
Политики, которые используются для прокси, представляющих доступ атрибута к изменяемому объекту, когда имя атрибута дается как объект const.
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 );
};
}}}
static object const & set ( object const & target , object const & key , object const & value );
Requires
Ключ — это объект, удерживающий струну.
Effects
устанавливает атрибут цели, названный ключом к значению.
Throws
Ошибка_already_set Если вы используете Python.
static void del ( object const & target , object const & key );
Requires
Ключ — это объект, удерживающий струну.
Effects
Удалить атрибут цели, названный ключом.
Throws
Ошибка_already_set Если вы используете Python.
Политики, которые используются для прокси, представляющих доступ к предмету (через операторов кронштейнов Python) к объекту const.
namespace boost { namespace python { namespace api
{
struct const_item_policies
{
typedef object key_type ;
static object get ( object const & target , object const & key );
};
}}}
static object get ( object const & target , object const & key );
Effects
доступ к элементу цели, указанному ключом.
Returns
Объект, управляющий результатом доступа к предмету.
Throws
Ошибка_already_set Если вы используете Python.
Политики, которые используются для прокси, представляющих доступ к предмету (через операторов кронштейнов Python) к изменяемому объекту.
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 );
};
}}}
static object const & set ( object const & target , object const & key , object const & value );
Effects
устанавливает элемент цели, определенный ключом к значению.
Throws
Ошибка_already_set Если вы используете Python.
static void del ( object const & target , object const & key );
Effects
удаляет элемент цели, указанный ключом.
Throws
Ошибка_already_set Если вы используете Python.
Политики, которые используются для прокси-серверов, представляющих доступ к срезу (через обозначение срезов Python [x:y]) к объекту const.
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 );
};
}}}
static object get ( object const & target , key_type const & key );
Effects
получает доступ к срезу цели, указанному ключом.
Returns
Объект, управляющий результатом среза доступа.
Throws
Ошибка_already_set Если вы используете Python.
Политики, которые используются для прокси-серверов, представляющих доступ к изменяемому объекту.
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 );
};
}}}
static object const & set ( object const & target , key_type const & key , object const & value );
Effects
устанавливает срез цели, заданный ключом к значению.
Throws
Ошибка_already_set Если вы используете Python.
static void del ( object const & target , key_type const & key );
Effects
удаляет срез цели, указанный ключом.
Throws
Ошибка_already_set Если вы используете Python.
Это базовый класс объекта и его шаблон прокси, используемый для обеспечения общего интерфейса: функции-члены и операторы, которые должны быть определены в корпусе класса. Его параметр шаблона U, как ожидается, будет классом, полученным из 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 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 , A1 const & a2 ,... An const & aN ) const ;
Effects
<call < object >( object (* static_cast < U *>( this )). ptr (),
a1 ,
a2 ,... aN )
>
object operator ()( detail :: args_proxy const & args ) const ;
Effects
<call object
with arguments
given by
the tuple
args
>
object operator ()( detail :: args_proxy const & args ,
detail :: kwds_proxy const & kwds ) const ;
Effects
<call object
with arguments
given by
the tuple
args ,
and named
arguments given
by the
dictionary kwds
>
operator bool_type () const ;
Effects
Испытывает истинное значение<* this
>.
Returns
<call < object >( object (* static_cast < U *>( this )). ptr (),
a1 ,
a2 ,... aN )
>
proxy < const_object_attribute > attr ( char const * name ) const ;
proxy < object_attribute > attr ( char const * name );
Requires
Имяntbs .
Effects
Получает доступ к названному атрибуту *это.
Returns
(37) в качестве мишени, и имя в качестве ключа.
proxy < const_object_objattribute > attr ( const object & name ) const ;
proxy < object_objattribute > attr ( const object & name );
Requires
Имя — это объект, удерживающий струну.
Effects
Названы имена (38).
Returns
(37) в качестве мишени, и имя в качестве ключа.
template < class T >
proxy < const_object_item > operator []( T const & key ) const ;
template < class T >
proxy < object_item > operator []( T const & key );
Effects
Для доступа к пункту<* this
>, указанному ключом.
Returns
Объект-прокси, который связывает<object (* static_cast < U *>( this ))
>как свою цель, и объект (ключ) как свой ключ.
template < class T , class V >
proxy < const_object_slice > slice ( T const & start ; start , V const & finish ) const
template < class T , class V >
proxy < object_slice > slice ( T const & start ; start , V const & finish );
Effects
В ней содержится описание<* this
>,<std :: make_pair ( object ( start ), object ( finish ))
>.
Returns
(44) в качестве цели, и (45) в качестве ключа.
Цель состоит в том, чтобы объект действовал как можно больше как переменная Python. Таким образом, выражения, которые вы ожидаете использовать в Python, должны работать так же, как и в C++. Большая часть интерфейса объекта обеспечивается его базовым классом<object_operators < 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 ();
Effects
Конструирует объект, управляющий ссылкой на объект Python None.
Throws
Ничего.
template < class T >
explicit object ( T const & x );
Effects
Преобразует x в python и управляет ссылкой на него.
Throws
error_already_set и устанавливает исключение Python TypeError, если такое преобразование невозможно.
~ object ();
Effects
Снижает количество ссылок на внутренне удерживаемый объект.
PyObject * ptr () const ;
Returns
указатель на внутренний объект Python.
bool is_none () const ;
Returns
Результат<( ptr () == Py_None )
>
Этот шаблон инстанцируется с различными политиками, описанными в этом документе, для реализации атрибута, элемента и доступа к срезам для объекта. Он хранит объект типа Политики::key_type.
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 );
};
}}}
operator object () const ;
Effects
Применяется<Policies :: get ( target , key )
>с целью прокси и ключевыми объектами.
proxy const & operator =( proxy const & rhs ) const ;
template < class T >
inline proxy const & operator =( T const & rhs ) const ;
Effects
<Policies :: set ( target ,
key ,
object ( 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 );
template < class R >
proxy operator |=( R const & rhs );
Effects
<operator @ =
>,<object (* this ) @ = rhs ;
>,<object (* this ) @ = rhs ;
>.
Returns
<* this
>
void del () const ;
Effects
Политика: del (цель, ключ) с целью прокси и ключевыми объектами.
template < class T >
void del ( proxy < T > const & x );
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 );
Effects
возвращает результат применения оператора к<object ( l )
>и<object ( r )
>соответственно в Python.
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 );
Effects
возвращает результат применения оператора к<object ( l )
>и<object ( r )
>соответственно в Python.
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 );
Effects
Назначает<l
>результат применения соответствующего оператора Python вместо<l
>и<object ( r )
>соответственно.
Returns
л
long len ( object const & obj );
Effects
<PyObject_Length ( obj . ptr ())
>
Returns
<len ()
>Объект.
Код Python:
def sum_items ( seq ):
result = 0
for x in seq :
result += x
return result
Версия C++
object sum_items ( object seq )
{
object result = object ( 0 );
for ( int i = 0 ; i < len ( seq ); ++ i )
result += seq [ i ];
return result ;
}
Статья boost/python/object.hpp раздела Boost.Python Reference Manual Chapter 3. Object Wrappers может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.
:: Главная :: Chapter 3. Object Wrappers ::