Blacklisting
Specifying attributes that should not be pickled
The main feature of vipickle
is the ability to pickle any object thanks to a PICKLE_BLACKLIST
class attribute :
from vipickle import VIPicklable
class MyClass(VIPicklable):
PICKLE_BLACKLIST = ["unpicklable_attribute"]
def __init__(self):
self.unpicklable_attribute = "do_not_pickle"
All attributes specified in PICKLE_BLACKLIST
will no be included in the pickled file :
>>> import pickle
>>>
>>> obj = MyClass()
>>> assert obj.unpicklable_attribute == "do_not_pickle"
>>>
>>> with open("obj.pkl", "wb") as f:
... pickle.dump(obj, f)
...
>>> with open("obj.pkl", "rb") as f:
... obj = pickle.load(f)
...
>>> obj.unpicklable_attribute
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'MyClass' object has no attribute 'unpicklable_attribute'
Inheritance
As any class attribute PICKLE_BLACKLIST
will be inherited by all subclasses.
It would be annoying to redefine PICKLE_BLACKLIST
in each subclasses to add or remove some attributes from the list so
vipickle
introduce two class attributes for doing so
PICKLE_BLACKLIST_ADD
class MySubClass(MyClass):
PICKLE_BLACKLIST_ADD = ["another_unpicklable_attribute"]
def __init__(self):
super(MySubClass, self).__init__()
self.another_unpicklable_attribute = "do_not_pickle"
PICKLE_BLACKLIST_REMOVE
class MySubSubClass(MySubClass):
PICKLE_BLACKLIST_REMOVE = ["unpicklable_attribute"]
def __init__(self):
super(MySubSubClass, self).__init__()
Warning
If PICKLE_BLACKLIST
is present, neither PICKLE_BLACKLIST_ADD
nor PICKLE_BLACKLIST_REMOVE
will be taken into
account