#python #ctypes
#python #ctypes
Вопрос:
Я хотел бы проверить, является ли переменная ctypes
типом. В документации указано, что все они наследуют ctypes._CData
тип. Однако это непубличный класс (и это не позволяет использовать isinstance
or issubclass
).
Каков рекомендуемый путь?
Это также может быть полезно для определения типа и проверки типа аргумента
Комментарии:
1. Проверка
isinstance(var, _SimpleCData)
, похоже, работает, этого достаточно?2. Больше похоже на проблему XY . Зачем вам нужна эта функциональность? _CData (и _SimpleCData ) могут сделать трюк, но на самом деле это просто рабочие модули (поскольку они являются частными). Не злоупотребляйте CTypes , «написав программы на C на Python «. Сделайте тяжелую работу на C , а затем оберните ее в Python .
3. Мне это нужно для двух вещей: 1) подсказка типа, 2) функция с несколькими подписями (если это ctype, сделайте это, если не делайте этого). Это своего рода полезное исключение из правила «писать программы на C на python»: на самом деле я пишу генератор кода на C . И определение структур в python дает мне бесплатную привязку Python для использования созданной библиотеки на C ( ) и Python
4. @101 _CData кажется даже недоступным. _SimpleCData, как вы сказали, является закрытым… Мой текущий обходной путь — попробовать ctypes.sizeof() для типа, если он выдает ошибку, это не тип ctype … Но это все равно хакерство… Может быть, мне следует написать проблему в python bugtracker ?
5. Имеет ли значение, что она частная? Это действительно работает. И кажется, что любое решение будет, по крайней мере, немного хакерским.