Python中用户类的序列化

2024-06-16 12:06:21 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用对象的类型作为字典键,最好能将这样的字典序列化为JSON字符串。有可能反序列化它,然后使用简单的“if 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文件(宠物)。你知道吗

有可能在Python中实现这样的行为吗?你知道吗


Tags: nameinselfjson字典序列化initdef
2条回答

你可以试试这个:

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))

替代解决方案

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

最后,如果不循环所有的值,就无法说“字典里有猫或狗吗?”

相关问题 更多 >