クラスのpickle化 (続)

以前,クラスをpickleで漬け込むための方法について紹介した.

そこでは,cloudpickleというライブラリを用いた方法を使ったが,Python3.7で導入されたdataclassデコレータクラスを使うと,普通のpickleでいけるようだ.

import dataclasses
@dataclasses.dataclass
class Node():
   idx: int 
   name: str 
   address: str  
   lat: str
   lng: str
   x: float = None
   y: float = None

sample_node1 = Node(1, "Customer A", "1-13-6 Yamato Kyoto", "123.45.67", "49.58.63")
sample_node2 = Node(2, "Customer B", "1-13-5 Yamato Kyoto", "123.45.69", "49.58.61")


print(sample_node)
>>> Node(name=1, address='Customer A', idx='1-13-6 Yamato Kyoto', lat='123.45.67', lng='49.58.63', x=None, y=None)

上記のように,コンストラクタ__init__や__repr__が自動生成される.

インスタンスを入れたリストCを作成して,pickleで保管する.

C =[ sample_node1, sample_node2]

import pickle
with open('sample.pickle', mode='wb') as f:
  pickle.dump(C,f)

不思議なことにcloudpickleではエラーするようだ.どうせデータをまとめているだけなので,@dataclassとpickleの組を使う方がスマートだろう.

この記事が気に入ったらサポートをしてみませんか?