The library provides a class called object, which encapsulates a valid Python object and provides a similar interface to Python's.
object operators
The first challenge was to provide support for object manipulations using a Python-like syntax, mostly in the form of operator overloads:
Python
C++
y = x.foo
y = x.attr("foo");
x.foo = 1
x.attr("foo") = 1;
y = x[z]
y = x[z];
x[z] = 1
x[z] = 1;
y = x[3:-1]
y = x.slice(3,-1);
y = x[3:]
y = x.slice(3,_);
y = x[:-2]
y = x.slice(_,-2);
z = x(1, y)
z = x(1, y);
z = x.f(1, y)
z = x.attr("f")(1, y);
not x
!x
x and y
x && y
object conversions
object has a templated constructor which can be used to convert any C++ object to Python using the same underlying mechanisms used for the arguments to call<>.
If an object instance is created without any arguments to the constructor then this instance holds the value None.
object from PyObject *
You cannot directly construct an object from a PyObject *, see /handle