ctypes:如何定义ctypes.C引用自己的C结构的结构?

时间:2019-12-04 20:24:31

标签: python ctypes

在C中,允许定义一个结构,该结构将指针嵌入到正在定义的同一结构的对象中。例如,以下node结构用于列表节点的实现

typedef struct node{
    void *val;
    struct node *next;
    struct node *prev;
} node;

嵌入类型为next的指针prevnode*

将其天真地转换成Python ctypes.Structure类会产生:

class NODE(Structure):
    _fields_ = [ ("val", c_void_p),
                 ("next", POINTER(NODE)),
                 ("prev", POINTER(NODE)) ]

但是,python不允许在其自己的定义(NODE)中引用类(在本示例中为NameError: name 'NODE' is not defined)。

我该如何解决?

PS:我尝试在类定义后 后定义_fields_属性

class NODE(Structure):
    _fields_ = []
NODE._fields_ = [ ("val", c_void_p),
                  ("next", POINTER(NODE)),
                  ("prev", POINTER(NODE)) ]

但这是不允许的,因为在ctypes.Structure基类中,_fields_被标记为(?)为final。 (AttributeError: _fields_ is final

0 个答案:

没有答案