Как я могу сериализовать test
ниже:
class Foo:
a = 0
b = {}
def __init__(self, a, b=None):
self.a = a
if b:
self.b = b
test = Foo(1)
test.b['c'] = 2
, чтобы получить результат:
{"a": 1, "b": {"c": 2}}
Я пробовал:
print(json.dumps(test, default=lambda x: x.__dict__))
но он возвращает:
{"a": 1}
Я понимаю, что test.b['c'] = 2
не добавляет b
или c
к Foo.__dict__
, поэтому, вероятно, x.__dict__
в лямбда-выражениях не поднимает их , Так ответ один из:
- Не назначайте пары ключ-значение произвольным объектам; вместо этого используйте
setattr
. - Не определяйте произвольные классы, если их набор свойств может развиваться во время выполнения; вместо этого используйте простой
dict
.