3.7 の標準ライブラリは、データクラスを dict に再帰的に変換できます (ドキュメントの例)。
from dataclasses import dataclass, asdict
from typing import List
@dataclass
class Point:
x: int
y: int
@dataclass
class C:
mylist: List[Point]
p = Point(10, 20)
assert asdict(p) == {'x': 10, 'y': 20}
c = C([Point(0, 0), Point(10, 4)])
tmp = {'mylist': [{'x': 0, 'y': 0}, {'x': 10, 'y': 4}]}
assert asdict(c) == tmp
ネストがあるときに辞書をデータクラスに戻す方法を探しています。C(**tmp)
データクラスのフィールドが単純な型であり、それ自体がデータクラスではない場合にのみ機能するようなもの。[jsonpickle][1] についてはよく知っていますが、これには顕著なセキュリティ警告が付いています。
編集:
回答では、次のライブラリが提案されています。
- デイサイト
- mashumaro (私はしばらく使用していましたが、うまく機能しますが、すぐにトリッキーなコーナーケースに遭遇しました)
- pydantic (非常にうまく機能し、ドキュメントが優れており、コーナーケースが少ない) [1]: https://jsonpickle.github.io/