クラスの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の組を使う方がスマートだろう.
この記事が気に入ったらサポートをしてみませんか?