python jsonpickle模块不序列化私有变量

jsonpickle模块可以把对象序列化为JSON文件, 还是比较方便的. 但是并不是所有变量都需要序列化的, 比如有些私有变量就不需要序列化, 下面是实现方法:

import jsonpickle

class NoSerailPrivates:
    '''表示不序列化私有变量, 以_开头都变量'''
    def __getstate__(self):
        '''对于jsonpickle模块, 决定序列化哪些属性, 以'_'开头的属性不序列化'''
        state = self.__dict__.copy()
        # 创建一个临时副本进行迭代和删除操作
        temp_dict = state.copy()
        for key in temp_dict.keys():
            if key.startswith('_'): del state[key]
        return state

class MyClass(NoSerailPrivates):
    def __init__(self):
        self._internal_property = "Internal Property"
        self.public_property = "Public Property"
        self.sub_object = SubClass()

class SubClass(NoSerailPrivates):
    def __init__(self):
        self._sub_internal_property = "Sub Internal Property"
        self.sub_public_property = "Sub Public Property"

obj = MyClass()

# 序列化对象及其子对象,忽略以'_'开头的属性
serialized_obj = jsonpickle.encode(obj)
print(serialized_obj)

这样只要从类NoSerailPrivates继承就可以了.

posted @ 2023-07-24 20:09  顺其自然,道法自然  阅读(26)  评论(0编辑  收藏  举报