Как правильно определить атрибуты в расширении PyCXX?

Интересно, как правильно определить атрибуты в расширении Python, созданном с помощью PyCxx.
В настоящее время я создал подкласс 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

Решение

Барри Скотт, разработчик PyCXX, любезно предоставил простое решение.
Хитрость в том, что питон запрашивает значение __members__ в getattr( const char *_name ) при звонке dir(), В этом случае можно вернуть Py::List объект, содержащий имена атрибутов в виде строк.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]