0
0

datacalsses-json: `to_dict()`でEnumのvalueを出力するには`encode_json=True`を指定する

Last updated at Posted at 2024-05-07

環境

  • 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>)
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0