0

我想知道在使用 PyCxx 生成的 python 扩展中定义属性的正确方法是什么。目前我已经Py::PythonClass在官方示例中创建了一个 as 的子类。我behaviors().supportGetattro();在初始化函数中添加并创建了一个简单的覆盖

Py::Object getattro( const Py::String &name_ )
{
    std::string name( name_.as_std_string( "utf-8" ) );

    if( name == "name" )
    {
        return m_name;
    }
    else
    {
        return genericGetAttro( name_ );
    }
}

到目前为止,一切都很好。在 python 中,我得到了正确的值obj.name,但唯一让我不满意的是,调用属性时dir(obj)没有name列出。我该如何改变呢?

4

1 回答 1

0

PyCXX 的开发者 Barry Scott 提供了一个简单的解决方案。诀窍是,python 在调用时会询问__members__in的值。在这种情况下,可以返回一个包含属性名称作为字符串的对象。getattr( const char *_name )dir()Py::List

于 2014-04-21T11:45:46.560 回答