0
PyCxx로 생성 된 Python 확장에서 속성을 정의하는 것이 적절한 방법이 무엇인지 궁금합니다. 현재 example과 같이 Py::PythonClass
의 하위 클래스를 만들었습니다. 나는 초기화 기능에 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_);
}
}
의 간단한 재정을 만들었습니다. 파이썬에서 나는 obj.name
으로 적절한 값을 얻었지만 나를 화나게하는 유일한 것은 dir(obj)
을 호출 할 때 name
속성이 나열되지 않는다는 것입니다. 어떻게 바꿀 수 있습니까?
어쩌면 질문은 PyCXX에서 속성을 선언하는 방법 일 것입니다. 속성에 접근하는 것은 위의 코드에서 작동하지만 PyCXX를 사용하지 않을 때'tp_getset'를 정의 할 때와 같이 객체의 속성과 메소드를 출력 할 때도 나열되도록하고 싶습니다. – Satara
나는'PyGetSetDef()'를 사용하여 속성 선언을 추가하려고합니다. 유일한 장애물은'tp_getset' 변수 (protected)에 접근하는 것입니다. 그러나'PythonType'의 서브 클래스를 지금 도우미로 정의하고 있습니다. – Satara