環境
- Python 3.12.1
- dataclasses-json 0.6.5
クラスの定義
from enum import Enum
from dataclasses import dataclass
from dataclasses_json import dataclass_json
class Color(Enum):
RED = 1
GREEN = 2
BLUE = 3
@dataclass_json
@dataclass
class Car:
name: str
color: Color
内容
to_dict()を引数なしで実行すると、colorはEnumのインスタンスになります。encode_json=Trueを指定すれば、colorはEnumのvalueになります。
In [39]: c2 = Car("name", Color.GREEN)
In [40]: c2
Out[40]: Car(name='name', color=<Color.GREEN: 2>)
In [37]: c2.to_dict()
Out[37]: {'name': 'bar', 'color': <Color.GREEN: 2>}
In [38]: c2.to_dict(encode_json=True)
Out[38]: {'name': 'bar', 'color': 2}
dataclasses-jsonのドキュメントにはencode_jsonについての説明がなかったので、簡単ではありますが記事を作成しました。
補足
from_dict()の挙動
colorにはEnumのvalueまたはEnumインスタンスを指定することができました。
# Enumのvalueが含まれている
In [32]: c2 = Car.from_dict({"name":"bar", "color":2})
In [33]: c2
Out[33]: Car(name='bar', color=<Color.GREEN: 2>)
# Enumインスタンスが含まれている
In [34]: c3 = Car.from_dict({"name":"bar", "color":Color.BLUE})
In [35]: c3
Out[35]: Car(name='bar', color=<Color.BLUE: 3>)