我有一个数据类,其字段template
类型为Enum。当使用asdict
函数时,它会将我的数据类转换为字典。是否可以使用FoobarEnum
的^{
我最初的想法是使用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'}
这不能用标准库实现,除非我不知道有什么元类enum黑客
Enum.name
和Enum.value
是内置的,不应该更改使用数据类
default_factory
的方法也行不通。因为调用default_factory
是为了生成数据类成员的默认值,而不是自定义对成员的访问您可以将Enum成员或Enum.value作为数据类成员,这就是
asdict()
将返回的内容如果希望将Enum成员(而不仅仅是Enum.value)保留为dataclass成员,并让函数将其转换为返回Enum.value而不是Enum成员的dictionary,正确的方法是实现自己的方法,将dataclass作为dictionary返回
事实上你能做到asdict具有关键字参数dict_factory,允许您在此处处理数据:
相关问题 更多 >
编程相关推荐