環境
- 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>)