chinapnr / fishbase

自主开发、整理的一套 Python 基础函数库,涵盖 system 系统增强包、logger 日志记录增强包、file 文件处理增强包、 date 日期处理函数包、data 数据信息处理函数包、csv 处理增强函数包、crypt 加密/编码增强包等,可减少程序开发工作量、降低引用复杂度。
MIT License
94 stars 29 forks source link

fish_common, 优化对象序列化 serialize_instance 并实现反序列化功能 #215

Closed itaa closed 5 years ago

itaa commented 5 years ago

fish_common, 优化对象序列化 serialize_instance 并实现反序列化功能

应用场景

为便于 python 对象的跨语言传递,特实现相应的对象序列化、反序列化方法;

实现功能

  1. 将对象(常见的数据类型int、str、list、dict、set、tuple等除外)的非私有属性递归后返回字典; 如: a.b.c = 1 返回 {'a':{'b': {'c':1}}}

  2. 将字典递归成对象形式; 如:{'a':{'b': {'c':1}}} 返回, 对象 a ,a.b.c 的值为 1

itaa commented 5 years ago

对象转为字典

参考伪代码

def obj2dict(some_obj):
    obj_dict = some_obj.__dict__
    for key, value in obj_dict.items():
        if isinstance(value, 非常见的数据类型):
            sub_dict = obj2dict(value)
            obj_dict.update({key: sub_dict})
        else:
            continue
    return obj_dict

字典转为对象

参考伪代码

class SomeObject(object):
    def __init__(self, 字典):
        for key, value in d.items():
            if isinstance(value, dict):
               setattr(self, key, SomeObject(value) if isinstance(value, dict) else value)
            else:
               setattr(self, key, value)
mindjun commented 5 years ago

常见的数据类型为: int, float, bool, complex, str, set, list, tuple, dict

jacsonking commented 5 years ago

字典转为对象中伪代码第 4-7 行可以使用第 5 行代替。