Python 標準ライブラリ copyreg pickleの定義
Publish date: 2021-08-06
copyregライブラリを使うとpickleの直列化を特定のクラスについてカスタマイズできる。
概要
ライブラリのインポートとサンプルのクラスを定義する。
import copyreg
import pickle
class SampleClass:
def __init__(self, name, age):
self.name = name
self.age = age
def show(self):
print(self.name, self.age)
直列化で使用する関数は、第1引数にクラス、 第2引数にコンストラクタの引数をタプルで指定。
def pickle_function(sc):
print("pickle_function")
print(sc.name ,sc.age)
return SampleClass, (sc.name + "test" ,sc.age)
使用例は以下のようになる。
copyreg.pickle(SampleClass, pickle_function)
sc = SampleClass('Taro', 60)
p = pickle.dumps(sc) # => pickle_function Taro 60
loads_sc = pickle.loads(p)
loads_sc.show() # => Tarotest 60