gpt4 book ai didi

python - 设置 ctypes.Structure 默认值

转载 作者:太空宇宙 更新时间:2023-11-03 11:34:12 27 4
gpt4 key购买 nike

这行不通:

class ifinfomsg(ctypes.Structure):
_fields_ = [
('ifi_family', ctypes.c_ubyte),
('__ifi_pad', ctypes.c_ubyte),
('ifi_type', ctypes.c_ushort),
('ifi_index', ctypes.c_int),
('ifi_flags', ctypes.c_uint),
('ifi_change', ctypes.c_uint(0xFFFFFFFF))
]

它的错误是:

  File "rtnetlink.py", line 243, in <module>
class ifinfomsg(ctypes.Structure):
TypeError: Error when calling the metaclass bases
second item in _fields_ tuple (index 5) must be a C type

但是我可以在 __init__() 中设置值:

class ifinfomsg(ctypes.Structure):
_fields_ = [
('ifi_family', ctypes.c_ubyte),
('__ifi_pad', ctypes.c_ubyte),
('ifi_type', ctypes.c_ushort),
('ifi_index', ctypes.c_int),
('ifi_flags', ctypes.c_uint),
('ifi_change', ctypes.c_uint)
]

def __init__(self):
self.__ifi_pad = 0
self.ifi_change = 0xFFFFFFFF

这是通过 __init__ 执行此操作的“正确”方法吗?

最佳答案

您的示例错误是因为 ctypes.c_uint(0xFFFFFFFF) 不是类型。在类定义中,一切都必须是类型(指针是 POINTER 而不是 pointer)。

我认为你使用的 __init__ 方法就好了。我包装了一些非常大的结构,并且通常使用 __init__ 就像您设置默认值一样。

一般来说,如果您可以控制要包装的 C 库,我认为您不应该在两个地方(C 和 Python)都有默认设置。在一个大型库中,我包装了我可以访问 C 的地方,我创建了我从 __init__ 调用的 C 函数“set_defaults”。这样只有 C 用户可以访问默认值,并且只有一组代码需要维护。

关于python - 设置 ctypes.Structure 默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9334779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com