我想知道在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
属性没有被列出。我怎样才能改变这一点?你知道吗
PyCXX的开发者barryscott提供了一个简单的解决方案。 诀窍是python在调用
dir()
时要求__members__
中的getattr( const char *_name )
值。在这种情况下,可以返回一个Py::List
对象,其中包含作为字符串的属性名。你知道吗相关问题 更多 >
编程相关推荐