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]]