Сериализация пользовательского класса в Python - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу использовать тип объекта в качестве словарного ключа с возможностью сериализации такого словаря в строку JSON, желательно.С возможностью десериализации его, а затем с помощью простой проверки «если SomeType in SomeDictionary».

Пример минимального кода, который демонстрирует проблему:

import json

class Cat():
  def __init__(self, name):
    self.name = name

class Dog():
  def __init__(self, name):
    self.name = name

pets = dict()
pets[Cat] = Cat("Tom")
pets[Dog] = Dog("Rex")

print(pets.keys())
print(json.dumps(pets))

Я получаю ошибку:

dict_keys([<class '__main__.Cat'>, <class '__main__.Dog'>])
Traceback (most recent call last):
  File "python", line 17, in <module>
TypeError: keys must be a string

В строке 17 указывается строка «print (json.dumps (pets))».

Возможно ли реализовать такое поведение в Python?

Ответы [ 2 ]

0 голосов
/ 26 сентября 2018

Альтернативное решение

pets = {"Tom" : Cat("Tom"), "Rex" : Dog("Rex")}
print(pets.keys())
print(json.dumps(pets))

В конце концов, невозможно сказать "есть ли кошка или собака в словаре", не перебирая все значения

0 голосов
/ 26 сентября 2018

Вы можете попробовать это:

import json

class Cat():
  def __init__(self, name):
    self.name = name

class Dog():
  def __init__(self, name):
    self.name = name

pets = dict()
pets[str(Cat)] = Cat("Tom").__dict__ #he can get the value using pets[str(Cat)] or pets.get(str(Cat),None))
pets[str(Dog)] = Dog("Rex").__dict__

print(pets.keys())
print(json.dumps(pets))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...