继承json模块,重用模块中类的方法并派生出新的功能
例:使用json模块序列化字符串
<span>import</span><span> json </span><span>from</span> <a href="https://www.gaodaima.com/tag/datetime" title="查看更多关于datetime的文章" target="_blank">datetime</a> <span>import</span><span> datetime, date dict1 </span>=<span> { </span><span>#</span><span> "time1": str(datetime.<a href="https://www.gaodaima.com/tag/now" title="查看更多关于now的文章" target="_blank">now</a>())</span> <span>"</span><span>time1</span><span>"</span><span>: datetime.now(), </span><span>"</span><span>name</span><span>"</span>: <span>"</span><span>orange</span><span>"</span><span> } res </span>=<span> json.dumps(dict1) </span><span>#</span><span> 无法序列datetime.now()格式,报错</span> <span>print</span>(res) <span>#</span><span> TypeError: Object of type datetime is not JSON serializable</span>
执行结果:
TypeError: Object of type datetime <span>is</span> <span>not</span> JSON serializable
# 报错原因:在原来json模块中可序列化的数据类型有限,在此例中datetime.now()无法被序列化
# 解决方法:在原模块下可以继承并重写某些功能(不止json模块,其他模块中的类方法也可继承并重写)
<span>import</span><span> json </span><span>from</span> datetime <span>import</span><span> datetime <br><span># 自定义一个类 </span></span><span>class</span><span> MyJson(json.JSONEncoder): </span><span>#</span><span> datetime.now() ---> o</span> <span>#</span><span> 重写json模块中JSONEncoder类的方法</span> <span>def</span><span> default(self, o): </span><span>#</span><span> isinstance: 判断一个对象是否是一个类的实例</span> <span>if</span> isinstance(o, datetime): <span>#</span><span> True</span> <span>return</span> datetime.strftime(o, <span>"</span><span>%Y-%m-%d %X</span><span>"</span><span>) </span><span>else</span><span>: </span><span>return</span><span> super().default(self, o) dict1 </span>=<span> { </span><span>#</span><span> "time1": str(datetime.now())</span> <span>"</span><span>time1</span><span>"</span><span>: datetime.now(), </span><span>"</span><span>name</span><span>"</span>: <span>"</span><span>orange</span><span>"</span><span> } </span><span>#</span><span> 指定自定义的一个MyJson 派生类</span><span> #</span><span> cls=自定义的类</span> res = json.dumps(dict1, cls=<span>MyJson) </span><span>print</span>(res)
执行结果:
{<span>"</span><span>time1</span><span>"</span>: <span>"</span><span>2020-10-26 20:48:44</span><span>"</span>, <span>"</span><span>name</span><span>"</span>: <span>"</span><span>orange</span><span>"</span>}