| Class Data Members

Data members may also be exposed to Python so that they can be accessed as attributes of the corresponding Python class. Each data member that we wish to be exposed may be regarded as read-only or read-write. Consider this class `Var`:

`

        struct Var
        {
            Var(std::string name) : name(name), value() {}
            std::string const name;
            float value;
        };

`

Our C++ `Var` class and its data members can be exposed to Python:

`

        class_<Var>("Var", init<std::string>())
            .def_readonly("name", &Var::name)
            .def_readwrite("value", &Var::value);

`

Then, in Python, assuming we have placed our Var class inside the namespace hello as we did before:

`

        >>> x = hello.Var('pi')
        >>> x.value = 3.14
        >>> print x.name, 'is around', x.value
        pi is around 3.14

`

Note that `name` is exposed as read-only while `value` is exposed as read-write.

`

        >>> x.name = 'e' # can't change name
        Traceback (most recent call last):
          File "<stdin>", line 1, in ?
        AttributeError: can't set attribute

`

Copyright © 2002-2003 David Abrahams
Copyright © 2002-2003 Joel de Guzman
Permission to copy, use, modify, sell and distribute this document is granted provided this copyright notice appears in all copies. This document is provided "as is" without express or implied warranty, and with no claim as to its suitability for any purpose.