python-3.x 如何知道类型是否是class _ctypes.PyCArrayType?

7tofc5zh  于 2023-06-07  发布在  Python
关注(0)|答案(1)|浏览(160)

我正在尝试从Python调用一些C API。我有一个类定义为

class X(ctypes.Structure):
    _fields_ = [
        ("member", ctypes.c_int * 5)
    ]

我想知道成员是否是数组类型。为了做到这一点,我做了下面的实验,但我不能检查类型的一个是一个数组。

>>>
>>> import ctypes
>>> a = 5*ctypes.c_int
>>> type(a)
<class '_ctypes.PyCArrayType'>
>>> b = (type(a) == _ctypes.PyCArrayType)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: module 'ctypes' has no attribute 'PyCArrayType'
>>>

如何检查a的类型是否是数组?

gkn4icbw

gkn4icbw1#

根据[Python.Docs]:class ctypes.Array(*args)(emphasisis mine):

数组的抽象基类

翻译成代码:

>>> import ctypes as cts
>>>
>>> I5 = cts.c_int * 5
>>> I5.__mro__
(<class '__main__.c_long_Array_5'>, <class '_ctypes.Array'>, <class '_ctypes._CData'>, <class 'object'>)
>>> issubclass(I5, cts.Array)
True
>>>
>>> i5 = I5()
>>> isinstance(i5, cts.Array)
True

相关问题