Python中用户类的序列化

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(pets))”的行。

是否可以在Python中实现此类行为?

答案

替代方案

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

最后,没有办法在没有循环所有值的情况下说“字典中是否有猫或狗”

另一答案

你可以试试这个:

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

以上是关于Python中用户类的序列化的主要内容,如果未能解决你的问题,请参考以下文章

教程4 - 验证和权限

常用python日期日志获取内容循环的代码片段

Android Studio 未看到 Ktor 序列化程序(未找到“用户”类的序列化程序。)

python中的self

python 用于数据探索的Python代码片段(例如,在数据科学项目中)

实用的 PyYAML 使用技巧