如何解决将静态类变量序列化为JSON的Pythonic方法
我希望将整个类序列化为json。但是,我需要的大多数变量都是静态变量(未在__init__()
中定义)。除了朴素的解决方案之外,是否还有Python的方法可以做到这一点,即按名称调用所有变量?
到目前为止,我尝试使用编码器调用json.dump()
来处理numpy数组:
cfg = MyConfig(Config)
class NumpyEncoder(json.JSONEncoder):
def default(self,obj):
if isinstance(obj,np.ndarray):
return obj.tolist()
return json.JSONEncoder.default(self,obj)
with open(os.path.join(logs_dir,'config.json'),'w') as file:
json.dump(cfg.__dict__,file,cls = NumpyEncoder)
但是(当然),此代码段仅处理__init__()
中声明的三个变量,而忽略了静态变量。
更多信息,以防万一:
我想序列化一个从Mask RCNN中的config
继承的类。
解决方法
因此,我做了一些研究并找到了解决方案,以防万一有人通过Google到达这里。保存所有类变量(甚至是静态变量)的方法是使用类名而不是实例名调用json.dump()
,就像这样:
with open(os.path.join(logs_dir,'config.json'),'w') as file:
json.dump(Config.__dict__.copy(),file,cls = NumpyEncoder)
我在copy()
上调用Config.__dict__
的原因是,在类(不是实例)上调用__dict__
返回了一个mappingproxy
对象,该对象不能使用幼稚地写入json dump()
。处理对象会将其变成字典,从而解决了该问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。