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
继承就可以了.