class SetGetState:
def __getstate__(self):
state = self.__dict__.copy()
try:
class_name = '_' + self.__class__.__name__ + '__'
new_items = {key:value for key, value in state.items() if class_name not in key}
return new_items
except KeyError:
pass
return state
def __getstate__(self):
state = self.__dict__.copy()
del state['_sa_instance_state']
return state
def __setstate__(self, state):
self.__dict__.update(state)
这个将帮助其他人完成他们的任务:
在自定义的
jsonpickle
包中创建这样的类:在类中继承这个不需要私有属性序列化
不能告诉默认类pickler忽略某些内容,不
jsonpickle
不支持^{jsonpickle
用来表示状态。两种方法都需要实现。如果
__getstate__
未实现,则jsonpickle
将使用__dict__
属性,因此您自己的版本只需使用相同的字典,删除_sa_instance_state
键即可:无论
__getstate__
返回是什么,都将被进一步、递归地处理,不必担心在那里处理子对象。如果添加
__getstate__
和__setstate__
不是一个选项,您还可以为类注册custom serialization handler;缺点是,虽然__getstate__
只需返回字典就可以了,但是自定义处理程序将需要返回一个完全展平的值。相关问题 更多 >
编程相关推荐