gpt4 book ai didi

python - 如何在数据类模块的 asdict 函数中使用枚举值

转载 作者:行者123 更新时间:2023-12-03 16:05:23 35 4
gpt4 key购买 nike

我有一个带有字段 template 的数据类枚举类型。使用 asdict 时函数它将我的数据类转换为字典。是否可以使用 value FoobarEnum 的属性返回字符串值而不是 Enum 对象?

我最初的想法是使用 dict_factory=dict asdict 的参数功能并提供我自己的工厂,但我无法弄清楚如何做到这一点。

from dataclasses import dataclass, asdict
from enum import Enum


@dataclass
class Foobar:
name: str
template: "FoobarEnum"


class FoobarEnum(Enum):
FIRST = "foobar"
SECOND = "baz"


foobar = Foobar(name="John", template=FoobarEnum.FIRST)

print(asdict(foobar))

电流输出:
{'name': 'John', 'template': <FoobarEnum.FIRST: 'foobar'>}

目标:
{'name': 'John', 'template': 'foobar'}

最佳答案

其实你可以做到。 阿迪克有关键字参数 dict_factory它允许您在那里处理您的数据:

from dataclasses import dataclass, asdict
from enum import Enum


@dataclass
class Foobar:
name: str
template: "FoobarEnum"


class FoobarEnum(Enum):
FIRST = "foobar"
SECOND = "baz"


def custom_asdict_factory(data):

def convert_value(obj):
if isinstance(obj, Enum):
return obj.value
return obj

return dict((k, convert_value(v)) for k, v in data)


foobar = Foobar(name="John", template=FoobarEnum.FIRST)

print(asdict(foobar, dict_factory=custom_asdict_factory))
# {'name': 'John', 'template': 'foobar'}

关于python - 如何在数据类模块的 asdict 函数中使用枚举值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61338539/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com