使用 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 butt PyMethoDef 解决了这个问题。例如,PyMethodDef * def = new PyMethodDef(); def-&gt;ml_name="foo"; ... 【参考方案1】:

我经常只是用我想要的任何属性创建一个真正的 Python 函数,并让它调用我用 C++ 实现的内部函数(以_ 开头,表示它不是公共的)。

然后你可以做任何你想做的事情,help(foo) 和类似的东西会看起来更熟悉,因为你的可见函数名称只是一个普通的 Python 函数。

【讨论】:

以上是关于使用 boost::python::make_function 设置 __name__ 属性的主要内容,如果未能解决你的问题,请参考以下文章

在使用加载数据流步骤的猪中,使用(使用 PigStorage)和不使用它有啥区别?

今目标使用教程 今目标任务使用篇

Qt静态编译时使用OpenSSL有三种方式(不使用,动态使用,静态使用,默认是动态使用)

MySQL db 在按日期排序时使用“使用位置;使用临时;使用文件排序”

使用“使用严格”作为“使用强”的备份

Kettle java脚本组件的使用说明(简单使用升级使用)