重用json模块中类的方法并派生出新的功能
继承json模块,重用模块中类的方法并派生出新的功能
例:使用json模块序列化字符串
import jsonfrom datetime import datetime, datedict1
= {# "time1": str(datetime.now())"time1": datetime.now(),
"name": "orange"
}
res = json.dumps(dict1)
# 无法序列datetime.now()格式,报错
print(res) # TypeError: Object of type datetime is not JSON serializable
执行结果:
TypeError: Object of type datetime isnot JSON serializable
# 报错原因:在原来json模块中可序列化的数据类型有限,在此例中datetime.now()无法被序列化
# 解决方法:在原模块下可以继承并重写某些功能(不止json模块,其他模块中的类方法也可继承并重写)
import jsonfrom datetime import datetimeclass MyJson(json.JSONEncoder):# datetime.now() ---> o
# 自定义一个类# 重写json模块中JSONEncoder类的方法
def default(self, o):
# isinstance: 判断一个对象是否是一个类的实例
if isinstance(o, datetime): # True
return datetime.strftime(o, "%Y-%m-%d %X")
else:
return super().default(self, o)
dict1 = {
# "time1": str(datetime.now())
"time1": datetime.now(),
"name": "orange"
}
# 指定自定义的一个MyJson 派生类
# cls=自定义的类
res = json.dumps(dict1, cls=MyJson)
print(res)
执行结果:
{"time1": "2020-10-26 20:48:44", "name": "orange"}
以上是 重用json模块中类的方法并派生出新的功能 的全部内容, 来源链接: utcz.com/z/531042.html