Не рекомендуется (больше не) создавать подкласс; функции json.dump()
и json.dumps()
принимают функцию default
:
def decimal_default(obj):
if isinstance(obj, decimal.Decimal):
return float(obj)
raise TypeError
json.dumps({'x': decimal.Decimal('5.5')}, default=decimal_default)
Демонстрация:
>>> def decimal_default(obj):
... if isinstance(obj, decimal.Decimal):
... return float(obj)
... raise TypeError
...
>>> json.dumps({'x': decimal.Decimal('5.5')}, default=decimal_default)
'{"x": 5.5}'
Код, который вы обнаружили, работал только на Python 2.6 и переопределяет закрытый метод это больше не вызывается в более поздних версиях.
Чтобы констатировать очевидное, в C или C ++ нет отражения. Следовательно, нет надежного способа перечисления переменных-членов (по умолчанию).
Если у вас есть контроль над структурой данных, вы можете попробовать std :: vector
или std :: map
, затем добавьте все свои переменные-члены в вектор / карту.
Конечно, это означает, что все ваши переменные, скорее всего, будут находиться в куче, поэтому такой подход снизит производительность. С подходом std :: map это означает, что у вас будет своего рода отражение "бедняка".
Вы можете указать свои типы в промежуточном файле и сгенерировать из него код C ++, что-то вроде классов COM можно сгенерировать из файлов idl. Сгенерированный код обеспечивает возможности отражения для этих типов.
Я сделал нечто похожее двумя разными способами для разных проектов:
Boost имеет готовую к использованию библиотеку Variant , которая может удовлетворить ваши потребности.
Самый простой способ - перейти на Objective-C ИЛИ Objective-C ++. Эти языки обладают хорошим самоанализом и полностью совместимы с исходными текстами C / C ++.
также Вы можете использовать m4 / cog / ... для одновременной генерации структуры и его описания из некоторого метаописания.
Поскольку C ++ не имеет встроенного отражения, вы можете получить информацию, только обучая вашу программу отдельно о содержимом структуры.
Это может быть либо путем создания вашей структуры из формата, который вы можно использовать после этого, чтобы узнать информацию о структуре, или путем анализа вашего файла .h для извлечения информации о структуре.
Такое ощущение, что вы создаете какой-то отладчик. Я думаю, это должно быть выполнимо, если вы убедитесь, что вы генерируете файлы pdb при создании исполняемого файла.
Не уверен, в каком контексте вы хотите выполнить это перечисление, но в вашей программе вы должны иметь возможность вызывать функции из Microsoft dbghelp.dll для получения информации о типе из переменных и т. Д. (Я предполагаю вы используете окна, что, конечно, может быть не так)
Надеюсь, это поможет вам немного продвинуться вперед.
Ура!
Я думаю, это должно быть выполнимо, если вы убедитесь, что вы генерируете файлы pdb при создании исполняемого файла.Не уверен, в каком контексте вы хотите выполнить это перечисление, но в вашей программе вы должны иметь возможность вызывать функции из Microsoft dbghelp.dll для получения информации о типе из переменных и т. Д. (Я предполагаю вы используете окна, что, конечно, может быть не так)
Надеюсь, это поможет вам немного продвинуться вперед.
Ура!
Я думаю, это должно быть выполнимо, если вы убедитесь, что вы генерируете файлы pdb при создании исполняемого файла.Не уверен, в каком контексте вы хотите выполнить это перечисление, но в вашей программе вы должны иметь возможность вызывать функции из Microsoft dbghelp.dll для получения информации о типе из переменных и т. Д. (Я предполагаю вы используете окна, что, конечно, может быть не так)
Надеюсь, это поможет вам немного продвинуться вперед.
Ура!