使用 boost::python::make_function 设置 __name__ 属性
Posted
技术标签:
【中文标题】使用 boost::python::make_function 设置 __name__ 属性【英文标题】:Set __name__ attribute using boost::python::make_function 【发布时间】:2019-11-26 12:20:17 【问题描述】:在使用 make_function 创建 Python 对象后,我需要访问该对象中的函数名。
我试过了:
void foo()
boost::python::object function = boost::python::make_function(foo);
// I got "unnamed Boost.Python function"
std::string name = boost::python::extract<std::string>(function.attr("__name__"));
// I got "attribute '__name__' of 'Boost.Python.function'"
function.attr("__name__") = "foo";
是否可以使用 make_function 设置“__name__”属性?
【问题讨论】:
我不是通过使用 make_function buttPyMethoDef
解决了这个问题。例如,PyMethodDef * def = new PyMethodDef(); def->ml_name="foo"; ...
【参考方案1】:
我经常只是用我想要的任何属性创建一个真正的 Python 函数,并让它调用我用 C++ 实现的内部函数(以_
开头,表示它不是公共的)。
然后你可以做任何你想做的事情,help(foo)
和类似的东西会看起来更熟悉,因为你的可见函数名称只是一个普通的 Python 函数。
【讨论】:
以上是关于使用 boost::python::make_function 设置 __name__ 属性的主要内容,如果未能解决你的问题,请参考以下文章
在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?
Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)