擅长:python、mysql、java
<p>这不能用标准库实现,除非我不知道有什么元类enum黑客<code>Enum.name</code>和<code>Enum.value</code>是内置的,不应该更改</p>
<p>使用数据类<code>default_factory</code>的方法也行不通。因为调用<code>default_factory</code>是为了生成数据类成员的默认值,而不是自定义对成员的访问</p>
<p>您可以将Enum成员或Enum.value作为数据类成员,这就是<code>asdict()</code>将返回的内容</p>
<p>如果希望将Enum成员(而不仅仅是Enum.value)保留为dataclass成员,并让函数将其转换为返回Enum.value而不是Enum成员的dictionary,正确的方法是实现自己的方法,将dataclass作为dictionary返回</p>
<pre class="lang-py prettyprint-override"><code>from dataclasses import dataclass
from enum import Enum
class FoobarEnum(Enum):
FIRST = "foobar"
SECOND = "baz"
@dataclass
class Foobar:
name: str
template: FoobarEnum
def as_dict(self):
return {
'name': self.name,
'template': self.template.value
}
# Testing.
print(Foobar(name="John", template=FoobarEnum.FIRST).as_dict())
# {'name': 'John', 'template': 'foobar'}
</code></pre>