我想知道在PyCxx生成的python扩展中定义属性的正确方法是什么。
目前,我已经在官方example中创建了Py::PythonClass
的子类。
我在初始化函数中添加了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
属性未被列出。我怎么能改变它?
答案 0 :(得分:0)
PyCXX开发人员Barry Scott提供了一个简单的解决方案。
诀窍在于,当调用__members__
时,python会在getattr( const char *_name )
中询问dir()
的值。在这种情况下,可以返回包含属性名称作为字符串的Py::List
对象。