我正在用我的C代码做一个python扩展模块,我已经做了一个用来传递C变量的struct。我希望其中一些变量在python级别是不可访问的。我该怎么做呢?
typedef struct {
PyObject_HEAD
std::string region;
std::string stream;
bool m_is_surface = false;
bool m_is_stream = false;
} PyType;
我希望用户不能访问m_is_surface
和m_is_stream
。只有PyType
的方法可以访问它。因此,和用户不能做如下操作:
import my_module
instance = my_module.PyType()
instance.m_is_surface = False # This should raise an error. Or preferably the user can't see this at all
我不能直接将private添加到struct中,因为python类型成员是作为一个独立函数创建的,并且稍后会链接到该类型,所以我不能在struct的方法中访问它们。因此,如果我说:
int PyType_init(PyType *self, PyObject *args, PyObject *kwds)
{
static char *kwlist[] = {"thread", "region", "stream", NULL};
PyObject *tmp;
if (!PyArg_ParseTupleAndKeywords(args, kwds, "bs|s", kwlist,
&self->thread, &self->region, &self->stream))
return -1;
return 0;
}
它将引发is private within this context
错误。
1条答案
按热度按时间p4tfgftt1#
你不应该做任何事情。除非你创建一个访问器属性,否则这些属性 * 已经 * 无法从Python访问。Python不能自动看到C/C++结构成员。