Вы будете нести ответственность за написание Python для кодирования и декодирования ваших классов.Как вы их кодируете?Это будет иметь большое значение для того, как вы их расшифруете.Python не пойдет вам на пользу, если вы выйдете за пределы dicts, списков, юникода, строк, целых чисел, чисел с плавающей точкой, логических значений и None
.
Каноническим способом кодирования пользовательских классов является создание подкласса json.JSONEncoder
ипредоставить метод default
.Метод default
имеет сигнатуру 'self, obj'
и возвращает obj
, закодированный в json, если он знает, как, и возвращает super(clsname, self).default(obj)
, если не знает.
Если вы кодируете свои классы как dicts, то вы можете написатьфункция, которая принимает один аргумент (декодированный словарь) и возвращает декодированный объект из этого.Затем передайте эту функцию конструктору для json.JSONDecoder
и используйте метод decode
для этого экземпляра.
В общем, json не идеально подходит для сериализации сложных классов.Если вы можете захватить все состояние функции таким образом, чтобы оно могло быть передано методу init, тогда используйте его, но если нет, то вы просто попытаетесь повредить голову.