![]() |
Home | Libraries | People | FAQ | More |
The upshot of the special member function invocation rules when the return
type is a TypeWrapper is that it is possible for the returned object to
manage a Python object of an inappropriate type. This is not usually a
serious problem; the worst-case result is that errors will be detected
at runtime a little later than they might otherwise be. For an example
of how this can occur, note that the dict
member function items returns
an object of type list.
Now suppose the user defines this dict
subclass in Python:
>>> class mydict(dict): ... def items(self): ... return tuple(dict.items(self)) # return a tuple
Since an instance of mydict
is also an instance of dict,
when used as an argument to a wrapped C++ function, boost::python::dict
can accept objects of Python type mydict.
Invoking items()
on this object can result in an instance of boost::python::list
which actually holds a Python tuple.
Subsequent attempts to use list
methods (e.g. append, or
any other mutating operation) on this object will raise the same exception
that would occur if you tried to do it from Python.