在PyCXX扩展中定义属性的正确方法是什么

2024-07-08 11:23:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道在PyCxx生成的python扩展中定义属性的正确方法是什么。 目前,我已经创建了一个子类Py::PythonClass,如官方的example。 我在初始化函数中添加了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属性没有被列出。我怎样才能改变这一点?你知道吗


Tags: 方法函数namepyobjstringreturn属性
1条回答
网友
1楼 · 发布于 2024-07-08 11:23:21

PyCXX的开发者barryscott提供了一个简单的解决方案。 诀窍是python在调用dir()时要求__members__中的getattr( const char *_name )值。在这种情况下,可以返回一个Py::List对象,其中包含作为字符串的属性名。你知道吗

相关问题 更多 >

    热门问题