在 C 中访问 Python 个基于槽的对象成员

Accessing Python slots based object members in C

我有一个 Python class 基于插槽来保存 space

class my_class(object):

    __slots__ = ('x', 'y')

    def __init__(self, x, y):
        self.x = x
        self.y = y

我需要从 C 函数访问此 class 的对象。 当我打印

obj->ob_type->tp_name

在 C 中,我看到 my_class 但无法找到访问实例成员值的方法。

对于 __slots__ 中的每个名称,Python 在 class 上生成一个描述符对象(存储在 PyTypeObject.tp_members struct). Each descriptor stores an offset, just like the __dict__ attribute is stored as an offset.

如果您已经知道插槽的名称并且只想访问每个实例上的值,只需使用正常的 PyObject_GetAttrString() function 将其留给 C-API 来访问为您准备的插槽。