在 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 来访问为您准备的插槽。
我有一个 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 来访问为您准备的插槽。