Types
以下はサポートされている型のリストです。各型の簡単な例は脚注にあります。
- プリミティブ(
int
,float
,str
,bool
)1 - コンテナ
list
,set
,tuple
,dict
2frozenset
3defaultdict
4
typing.Optional
5typing.Union
6 7 8@dataclass
を用いたユーザ定義クラス 9 10typing.NewType
を用いたプリミティブ型 11typing.Any
12typing.Literal
13typing.Generic
14typing.ClassVar
15typing.InitVar
16Enum
およびIntEnum
17- 標準ライブラリ
- PyPIライブラリ
numpy
データ型 23- 宣言的データクラスマッピングを用いた
SQLAlchemy
(実験的)24
このように複雑なクラスを記述することができます。
@serde
class bar:
i: int
@serde
class Foo:
a: int
b: list[str]
c: tuple[int, float, str, bool]
d: dict[str, list[tuple[str, int]]]
e: str | None
f: Bar
Numpy
上記のすべての(デ)シリアライズ方法は、numpy
追加パッケージを使用することで、ほとんどのnumpyデータ型を透過的に扱うことができます。
import numpy as np
import numpy.typing as npt
@serde
class NPFoo:
i: np.int32
j: np.int64
f: np.float32
g: np.float64
h: np.bool_
u: np.ndarray
v: npt.NDArray
w: npt.NDArray[np.int32]
x: npt.NDArray[np.int64]
y: npt.NDArray[np.float32]
z: npt.NDArray[np.float64]
npfoo = NPFoo(
np.int32(1),
np.int64(2),
np.float32(3.0),
np.float64(4.0),
np.bool_(False),
np.array([1, 2]),
np.array([3, 4]),
np.array([np.int32(i) for i in [1, 2]]),
np.array([np.int64(i) for i in [3, 4]]),
np.array([np.float32(i) for i in [5.0, 6.0]]),
np.array([np.float64(i) for i in [7.0, 8.0]]),
)
>>> from serde.json import to_json, from_json
>>> to_json(npfoo)
'{"i": 1, "j": 2, "f": 3.0, "g": 4.0, "h": false, "u": [1, 2], "v": [3, 4], "w": [1, 2], "x": [3, 4], "y": [5.0, 6.0], "z": [7.0, 8.0]}'
>>> from_json(NPFoo, to_json(npfoo))
NPFoo(i=1, j=2, f=3.0, g=4.0, h=False, u=array([1, 2]), v=array([3, 4]), w=array([1, 2], dtype=int32), x=array([3, 4]), y=array([5., 6.], dtype=float32), z=array([7., 8.]))
SQLAlchemy宣言的データクラスマッピング(実験的)
SQLAlchemy宣言的データクラスマッピング統合の実験的サポートが追加されましたが、@serde(type_check=strict)
やserde.field()
などの特定の機能は現在サポートされていません。
実験的な機能に依存する場合、本番環境での使用には注意が必要です。
コードを徹底的にテストし、潜在的な制限や予期せぬ動作に注意することを推奨します。
新しい型のサポートが必要ですか?
標準ライブラリに現在サポートされていない型を使用する必要がある場合は、Githubでissueを作成してリクエストしてください。
なお、サードパーティのPythonパッケージの型については、numpyのような人気のあるパッケージの型を除き、pyserdeをできるだけシンプルに保つためにサポートする予定はありません。
カスタムクラスやフィールドシリアライザの使用を推奨します。
1
2
3
4
5
6
9
10
11
12
examples/any.py を参照
13
14
15
16
17
18
19
20
21
22
23
24