Найл Дуглас приводит следующие примечания:
Если вы определите пользовательские преобразователи, подобные тем, которые показаны выше, функции<def_readonly()>и<def_readwrite()>, предоставляемые<boost::python::class_>для прямого доступа к вашим данным, не будут работать, как ожидалось. Это потому, что<def_readonly("bar",&foo::bar)>эквивалентно:
.add_property("bar", make_getter(&foo::bar, return_internal_reference()))
Точно так же<def_readwrite("bar",&foo::bar)>эквивалентно:
.add_property("bar", make_getter(&foo::bar, return_internal_reference()),
make_setter(&foo::bar, return_internal_reference())
Для определения политики возвратной стоимости, совместимой с пользовательскими конверсиями, заменяют<def_readonly()>и<def_readwrite()>на<add_property()>. Например:
.add_property("bar", make_getter(&foo::bar, return_value_policy<return_by_value>()),
make_setter(&foo::bar, return_value_policy<return_by_value>()))