Интроспекция вложенных структур ctypes
Аналогично этому вопросу я хотел бы напечатать элементы структуры C из Python.
Я выполнил следующую функцию:
def print_ctypes_obj(obj, indent=0): for fname, fvalue in obj._fields_: if hasattr(fvalue, '_fields_'): print_ctypes_obj(fvalue, indent+4) else: print '{}{} = {}'.format(' '*indent, fname, getattr(obj, fname))
Идея состоит в том, что если само поле имеет атрибут _fields_
, то это структура, иначе нормальное поле так печатает. Рекурсия работает отлично, но после первого уровня я получаю распечатываемые строки вместо значений. Например:
foo = 1 bar = 2 baz = 3 innerFoo = <Тип поля = c_long, ofs = 0, size = 4> innerBar = <Тип поля = c_long, ofs = 4, size = 4> innerBaz = <Тип поля = c_long, ofs = 8, size = 4> quz = 4
Результат, который я ожидаю, будет примерно таким:
foo = 1 bar = 2 baz = 3 innerFoo = 5 innerBar = 23 innerBaz = 56 quz = 4
Какая у меня ошибка?
- Python: найти типы ключей в locals ()
- Осмотреть атрибуты класса python
- Изменить ссылку на функцию во время выполнения в Python
- как сохранить путь модуля для модуля, выполняемого как скрипт
- Как получить, кто вызвал функцию или метод?
Решение довольно простое.
При печати вложенных структур мне все равно нужно получить структуру как атрибут, поэтому ctypes может выполнять свою магию:
print_ctypes_obj(getattr(obj, fname), indent+4)
(другая проблема с кодом – это именование итерированных пар, они должны быть fname, ftype
вместо fname, fvalue
что неверно и вводит в заблуждение)
- Python – связь между протоколом / сервером asyncio
- Создайте файл MIDI и воспроизводите его, не сохраняя его на диске.
- Как я могу увидеть, является ли метод декоратором?
- Как функция может быть устойчивой к себе?
- Как получить доступ к родительскому классу во время инициализации в python?
- Можете ли вы перечислить аргументы ключевых слов, получаемые функцией Python?
- Python. Как я могу запросить класс, в котором определяется метод?
- Каковы аргументы в вызове python types.CodeType ()?
- Дискриминация между вызывающими внутри и вне иерархии классов
- Как перечислить все поля класса в Python (и без методов)?
- Получить пакет объекта Python