ctypes 位域是如何工作的?

how ctypes bitfields really work?

在python中,使用ctypes,以下是合法的:

from ctypes import *
class POINT(Structure):
    _fields_ = [("x", c_int),
     ("y", c_int)]

p = POINT(10,20)
sum = p.x + p.y

但是这是怎么回事?我的意思是 p.x 如何完全合法?什么样的技巧提供了这个? 谢谢。

当您初始化子class 的实例时,Structure class 它会读取_fields_ 并根据该列表中的字段名称关联属性。

这一切都是用 C 语言完成的,所以如果您想确切地了解它是如何完成的,您需要使用源代码,特别是 Struct_type_init_pos_args 函数的定义https://github.com/python/cpython/blob/master/Modules/_ctypes/_ctypes.c#L4021