TGViewer
Python: задачки и вопросы Python: задачки и вопросы @quiz_python · 6.94K subscribers
Post #4859 346
Python: задачки и вопросы
Развёрнутое пояснение:

1. В памяти создаётся объект Tags, содержащий два ключа a и b.

2. Функция json.dumps начинает кодирование этого объекта.

3. Внутренний энкодер CPython сначала проверяет базовые типы: строки, числа, булевы значения, None, списки, кортежи и dict.

4. Tags наследует UserDict, который не является подклассом dict, поэтому объект не попадает в ветку для словарей.

5. Поскольку тип неизвестен энкодеру, вызывается функция default, переданная в аргументе default.

6. В default объект o имеет длину 2, поэтому возвращается строка tags:2.

7. json.dumps кодирует эту строку как JSON-строку, а print выводит tags:2.

Почему это важно: при сериализации пользовательских маппингов, таких как UserDict или ChainMap, нельзя рассчитывать, что json.dumps автоматически превратит их в обычный словарь. Это часто встречается при логировании, отправке конфигурации или сохранении состояния, когда кастомный контейнер оказывается строкой вместо JSON-объекта. Чтобы избежать сюрприза, передавайте данные через dict() или реализуйте собственный JSONEncoder.
  • ✍ 1
More from @quiz_python
  1. Sep 14, 2026А вы уже забрали свой подарок ко Дню программиста? Мы в Tproger вместе с нашими друзьями с…
  2. Aug 30, 2026Развёрнутое пояснение: 1. Создаётся список batch с двумя разными словарями. 2. Вызов enric…
  3. Aug 30, 2026Post #4875
  4. Aug 30, 2026Развёрнутое пояснение: 1. Создаётся внутренний список ['', '', ''] — три пустые строки. 2.…
  5. Aug 30, 2026Post #4873
  6. Aug 29, 2026Развёрнутое пояснение: 1. Декоратор dataclass(frozen=True) генерирует для Client методы __…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →