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