可以使用getter和setter向类添加属性(在简单的情况下):
class<X>("X")
.add_property("foo", &X::get_foo, &X::set_foo);
因此,您可以像这样从python中使用它:
^{pr2}$但是如何将属性添加到模块本身(而不是类)?
有
scope().attr("globalAttr") = ??? something ???
以及
def("globalAttr", ??? something ???);
我可以使用上述两种方法添加类的全局函数和对象,但似乎不能像在类中那样添加属性。在
要在
^{pr2}$BOOST_PYTHON_MODULE
之外设置属性,请使用现在您可以在python中执行以下操作
当然,你需要预先登记^ {CD3>}类(例如,你可以在同一个^ { CD1>}调用中这样做),并确保C++对象的生命周期超过Python模块的生命周期。可以使用任何^ {< CD5> }而不是包装C++一个。在注意,
BOOST_PYTHON_MODULE
吞并异常,因此如果您出错,您不会收到任何错误指示,BOOST_PYTHON_MODULE
生成的函数将立即返回。为了简化此案例的调试,您可以在BOOST_PYTHON_MODULE
内捕获异常,或者临时添加一些日志记录语句作为BOOST_PYTHON_MODULE
的最后一行,以查看是否已到达:__getattr__
和{相关问题 更多 >
编程相关推荐