在结构(ctypes)的运行时更改_fields_中元素的数量

时间:2012-12-20 16:01:00

标签: python ctypes structure

使用ctypes我定义了以下类:

class ListOfVariables(Structure):
   _fields_ = [
                ("name0", c_int),
                ("name1", c_int),
                ("name2", c_int)              
]                  

是否可以在运行时向成员'字段'添加一个元素? 这样我们就可以用以下方式定义一个新变量,例如:

cstructA = ListOfVariables(1,2,3,4)

甚至是其他类型:

cstructB = ListOfVariables(1,2,3,'b')

在动态修改类之后,必须使用新的参数调用构造函数。

1 个答案:

答案 0 :(得分:1)

你不能这样做,因为结构应该是一个C结构---一个固定大小的字节,具有固定的元素偏移量。您无法动态更改C结构的布局。这意味着什么,例如已经创建的实例?

可以动态地改变常规Python对象的布局,因为它们的实现恰好比简单的C结构更复杂。

根据您的需要,您可以创建ListOfVariables的子类:

class ListOfVariables2(ListOfVariables):
    _fields_ = [('extra', c_int)]

这意味着你要定义另一个C结构,它是旧结构的扩展。