Этот пример исправляет ваши ошибки, но не решает вашу проблему:
import json
class Xint(int):
def __str__(self):
return f"'{int(self)}'"
# I'm leaving this in, but I think it's wrong
# a representation like f'Xint({int(self)})' would be better
__repr__ = __str__
x = Xint(2)
y = [x]
print(x, y)
print(json.dumps(y))
Результат:
'2' ['2']
[2]
Обратите внимание, как json.dumps()
теперь правильно отображает 2
. Но он по-прежнему не показывает кавычки, как print()
. Это связано с тем, что json
распознает тип переменной, которую требуется сбросить, и это просто int
.
Если вам это нужно, вам нужно убедить json
, что это действительно просто строка , или какой-то тип, который json
добавит в дамп в виде строки. Но это сломает практически любое другое использование, которое вы можете придумать для своего типа.
Я думаю, что настоящая проблема здесь - проблема XY. Вместо того, чтобы спрашивать, как заставить ваше решение работать, возможно, вы расскажете, какую проблему вы пытались решить с помощью нового типа для начала?