使不可pickle的对象可拾取。
pickle-mixin的Python项目详细描述
使不可pickle的对象可拾取。
安装
您可以通过pip安装它
pip install pickle-mixin
用法
初始化pickle
假设您有一个对象不可pickle的类,或者 需要大量的磁盘空间或内存才能进行pickle操作。 PickleByInit类允许您通过对象pickle对象属性 初始化。请考虑以下类别:
classFoo(PickleByInit):def__init__(self,obj):super(Foo,self).__init__()self.obj=objclassBar(object):def__init__(self,filename):self.filename=filenamedef__getstate__(self):raisePicklingErrordefinit_dict(self):returndict(filename=self.filename)
尝试如下腌制
f=Foo(Bar('file.txt'))pickle.dumps(f)
将引发PicklingError。另一方面,下面的 工作:
f=Foo(Bar('file.txt'))f.set_signature_only_attr('obj')pickle.dumps(f)
f.obj属性的取消pickling过程通过对象发生 初始化,从init_dictas传递返回的字典 Bar.__init__的关键字参数。
< H3>带槽和不带槽的混合类< EH3>
pickling不保存通过__slots__定义的属性 以下情况:
classFoo(object):__slots__=['a']def__init__(self):self.a=4classBar(Foo):def__init__(self):pass
SlotPickleMixin修复了它:
classFooMixin(object):__slots__=['a']def__init__(self):self.a=4classBarMixin(FooMixin,SlotPickleMixin):def__init__(self):FooMixin.__init__(self)SlotPickleMixin.__init__(self)f=BarMixin()o=pickle.dumps(f)f=pickle.loads(o)asserthasattr(f,'a')
许可证
这个项目是根据麻省理工学院的许可证授权的-参见 LICENSE有关详细信息的文件