0
我想知道在PyCxx生成的python擴展中定義屬性的正確方法。 目前我已經創建了Py::PythonClass
的子類,如官方example。 我在初始化函數添加behaviors().supportGetattro();
,創造了什麼是在PyCXX擴展中定義屬性的正確方法
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中聲明屬性。訪問該屬性適用於上面的代碼,但我希望在打印對象的屬性和方法時也列出它,就像在不使用PyCXX時定義'tp_getset'時的情況一樣。 – Satara
好吧,我現在通過使用'PyGetSetDef()'來添加屬性聲明。唯一的障礙是獲取'tp_getset'變量的訪問權限(保護),但我現在將'PythonType'的子類定義爲助手。 – Satara