【问题标题】:Output enum name as enum value in a dict showing class attributes in Python在 Python 中显示类属性的 dict 中将枚举名称作为枚举值输出
【发布时间】:2021-03-18 00:47:42
【问题描述】:

我有一个枚举和一个数据类,如下所示。

class Mode(Enum):
    MODE_A = auto()
    MODE_B = auto()

@dataclass
class BaseDataClass:
    a: int
    b: int
    c: int
    mode: Mode

    def to_dict(self):
        return vars(self)

to_dict 函数显示

b = BaseDataClass(a=1, b=2, c=3, mode=Mode.MODE_A)
b.to_dict()

> {'a': 1, 'b': 2, 'c': 3, 'mode': <Mode.MODE_A: 1>}

我想将模式名称输出为它的值,例如'mode': 'MODE_A'。我尝试在枚举类中使用诸如__str____repr__ 之类的dunder 方法,但它不起作用。因为它不应该编辑__dict__ 值,有没有人提出一个实现这一目标的好方法?

【问题讨论】:

  • 如果你只做print(Mode.MODE_A),它是否能如你所愿?
  • @Barmar 是的,通过打印,它显示如下&gt;&gt;&gt; print(Mode.MODE_A) 然后Mode.BUDGET
  • 如果您担心它在命令行解释器中的打印方式,那么您什么都不必担心。对于您的用户,您将进行格式化,它看起来是正确的。
  • 我想要的是一种通过to_dict函数输出具有{'mode': 'MODE_A'}而不是{'mode': &lt;Mode.MODE_A: 1&gt;}的dict的方法。

标签: python python-3.x class enums


【解决方案1】:

不确定您为 __repr__ 尝试了什么,但这有效:

class Mode(Enum):
    MODE_A = auto()
    MODE_B = auto()
    #
    def __repr__(self):
        return self.name

并在使用中:

>>> {'mode': Mode.MODE_A}
{'mode': MODE_A}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 2014-09-24
    • 1970-01-01
    • 2015-07-28
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    相关资源
    最近更新 更多